PHP 之与Js通用的加密解密
一、代码
1、php
//解密函数 function myDecode($txt, $key = 'YangYang') { $txt = urldecode($txt); $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $ch = $txt[0]; $nh = strpos($chars, $ch); $mdKey = md5($key . $ch); $mdKey = substr($mdKey, $nh % 8, $nh % 8 + 7); $txt = substr($txt, 1); $tmp = ''; $j = 0; $k = 0; for ($i = 0; $i < strlen($txt); $i++) { $k = $k == strlen($mdKey) ? 0 : $k; $j = strpos($chars, $txt[$i]) - $nh - ord($mdKey[$k++]); while ($j < 0) $j += 64; $tmp .= $chars[$j]; } return base64_decode($tmp); } //加密函数 function myEncrypt($txt, $key = 'YangYang') { $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; $nh = rand(0, 64); $ch = $chars[$nh]; $mdKey = md5($key . $ch); $mdKey = substr($mdKey, $nh % 8, $nh % 8 + 7); $txt = base64_encode($txt); $tmp = ''; $j = 0; $k = 0; for ($i = 0; $i < strlen($txt); $i++) { $k = $k == strlen($mdKey) ? 0 : $k; $j = ($nh + strpos($chars, $txt[$i]) + ord($mdKey[$k++])) % 64; $tmp .= $chars[$j]; } return urlencode($ch . $tmp); }
2、js
let Base64 = require('js-base64').Base64; import md5 from 'js-md5' var MyCode = { encrypt(txt, key='YangYang') { //加密 var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; var nh = Math.floor(Math.random() * 65); var ch = chars[nh]; var mdKey = md5(key + ch); var mdKey = mdKey.substr(nh % 8, nh % 8 + 7); txt = Base64.encode(txt); var tmp = '', j = 0, k = 0; for (var i = 0; i < txt.length; i++) { k = k == mdKey.length ? 0 : k; j = (nh + chars.indexOf(txt[i]) + mdKey[k++].charCodeAt(0)) % 64; tmp += chars[j]; } return encodeURI(ch + tmp); }, decode(txt, key='YangYang') { //解密 txt = decodeURI(txt); var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+"; var ch = txt[0]; var nh = chars.indexOf(ch); var mdKey = md5(key + ch); mdKey = mdKey.substr(nh % 8, nh % 8 + 7); txt = txt.substr(1); var tmp = '', j = 0, k = 0; for (var i = 0; i < txt.length; i++) { k = k == mdKey.length ? 0 : k; j = chars.indexOf(txt[i]) - nh - mdKey[k++].charCodeAt(0); while (j < 0) { j += 64; } tmp += chars[j]; } return Base64.decode(tmp); } } export default MyCode