账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于前端AES加密与后台不同的问题。
    44
    0

    后台为php,使用opensslaes进行加密,加密结果与http://tool.chacuo.net/cryptaes结果是一致的。

    现在的问题是前端使用CryptoJS怎么弄都不一样。要么与后台加密的数据不一致,要么CryptoJS加的密不能用CryptoJS来解密。

    问题出在哪里呢,如果大家有更好的方案麻烦一并写出。太苦恼了。

    php代码:

    $data = '1000001';
    $key = 'ABC123';
    $iv = '1111111111111111';
    
    // 结果是:2oXkUjqbc1JnSpWEemVfzg==
    // 结果和http://tool.chacuo.net/cryptaes一致
    $encrypt_string = openssl_encrypt($data, 'AES-128-CBC', $key, 1,  $iv);

    js代码,前提引入了CryptoJS:

    //十六位十六进制数作为秘钥
    var aeskey = CryptoJS.enc.Utf8.parse("ABC123");
    //十六位十六进制数作为秘钥偏移量
    var aesiv = CryptoJS.enc.Utf8.parse(1111111111111111);
    
    // 加密
    function encrypt(data) {
        var srcs = CryptoJS.enc.Utf8.parse(data);
        var encrypted = CryptoJS.AES.encrypt(srcs, aeskey, {
            iv: aesiv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        //返回base64加密结果
        return encrypted.toString();
    }
    
    //解密
    function decrypt(data) {
        // data是base64编码数据
        var decrypt = CryptoJS.AES.decrypt(data, aeskey, {
            iv: aesiv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
        var decryptedStr = decrypt.toString();
        return decryptedStr;
    }
    
    // 结果是:IkNtZY1m41sEkgIqsuZBoQ==
    // 结果相差太大
    console.log(encrypt('1000001'));
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部