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

2 篇文章 0 订阅

原文: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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值