您的位置:首页 > Web前端

php后端加密js前端解密mcrypt_module替换为openssl_encrypt

2018-03-24 21:46 936 查看
原文:http://vtuce.cn/p/18.html

PHP端:

$string 要加密/解密的字符串$code 秘钥字符串$operation 默认false表示加密,传入true表示解密
function secret($string,$code,$operation=false){
$code = md5($code);
$iv = substr($code,0,16);
$key = substr($code,16);
if($operation){
return openssl_decrypt(base64_decode($string),"AES-128-CBC",$key,OPENSSL_RAW_DATA,$iv);
}
return base64_encode(openssl_encrypt($string,"AES-128-CBC",$key,OPENSSL_RAW_DATA,$iv));
}
注意:本函数支持php到7+ ,同时兼容5.6.33(已测试通过的版本) 。如果需要将加密的字符串在网址中传递,使用urlencode($str)函数转码即可。
JS端:string 要加密/解密的字符串code 秘钥字符串operation 默认false表示加密,传入true表示解密
<script src="cryptojs/core.js"></script>
<script src="cryptojs/enc-base64.js"></script>
<script src="cryptojs/cipher-core.js"></script>
<script src="cryptojs/aes.js"></script>
<script src="cryptojs/md5.js"></script>
<script>
function secret(string, code, operation) {
code = CryptoJS.MD5(code).toString();
var iv = CryptoJS.enc.Utf8.parse(code.substring(0,16));
var key = CryptoJS.enc.Utf8.parse(code.substring(16));
if(operation){
return CryptoJS.AES.decrypt(string,key,{iv:iv,padding:CryptoJS.pad.Pkcs7}).toString(CryptoJS.enc.Utf8);
}
return CryptoJS.AES.encrypt(string, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7}).toString();
}
</script>
注意:如果需要将加密的字符串在网址中传递,使用encodeURIComponent(str)函数转码即可。实战案例:PHP后端加密:
public function index(){
$string = 'hello world';
$code = 'vtucecn';
$str = $this->secret($string,$code);
return urlencode($str);
}
JS前端解密:
var $string = '页面已存在的密文';
var $code = '条件触发,get请求获取到的code';
var string = secret($string,$code,true);
console.log(string);
备注:为了避免暴力破解,$code要设置得足够复杂。本例中,前端JS并不知道$code,当一定条件触发后,才会去后端获取到code。CryptoJS地址:https://github.com/brix/crypto-js/tree/release-3.1.2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: