aes 坑

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>aes</title>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
  <script src="jquery.js"></script>
  <script src="crypto-js.js"></script>
</head>
<body>
<script>
/**
 * KEY盐值转换
 */
function getKey(key) {
  var realKey = CryptoJS.SHA1(key);
  realKey = CryptoJS.SHA1(realKey).toString().substring(0, 32); //真正的key
  return realKey;
}

/**
 * 加密数据
 */
var aesEncrypt = function(data, keyStr, ivStr) {
    var sendData = CryptoJS.enc.Utf8.parse(data);

    var key = CryptoJS.enc.Utf8.parse(keyStr);

    var realKey = getKey(keyStr);

    var iv_  = CryptoJS.enc.Utf8.parse(ivStr);

    var encrypted = CryptoJS.AES.encrypt(sendData, CryptoJS.enc.Hex.parse(realKey),{
        iv:iv_,
        mode:CryptoJS.mode.OFB,
        padding:CryptoJS.pad.Pkcs7
      });

       
    console.log("原始值:"+data);
    console.log("UTF-8后:"+sendData);
    var encryptedStr = encrypted.ciphertext.toString();
    console.log('加密后        '+encryptedStr);
      console.log("加密转大写后:"+encryptedStr.toUpperCase());
    //console.log("HEX加密:"+ CryptoJS.enc.Hex.parse(encrypted.ciphertext));
    console.log("Base64加密:"+CryptoJS.enc.Base64.stringify(encrypted.ciphertext));
        //return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
    return encryptedStr.toUpperCase();
};

function aesDecrypt(data,keyStr,ivStr) {
    console.log("原始值:"+data);

   var cipherTextHexStr = CryptoJS.enc.Hex.parse(data);
   var cipherTextBase64Str = CryptoJS.enc.Base64.stringify(cipherTextHexStr);

    var key = CryptoJS.enc.Utf8.parse(keyStr);

    var realKey = getKey(keyStr);

    var iv_  = CryptoJS.enc.Utf8.parse(ivStr);

    var decrypt = CryptoJS.AES.decrypt({
       // ciphertext: CryptoJS.enc.Base64.parse(cipherTextBase64Str)
        ciphertext: cipherTextHexStr
    }, CryptoJS.enc.Hex.parse(realKey), {
      iv:iv_,
      mode: CryptoJS.mode.OFB,
      padding: CryptoJS.pad.Pkcs7
    });

    console.log("解密后0:"+decrypt.toString());

    console.log("解密后1:"+decrypt.toString(CryptoJS.enc.Utf8));

    return decrypt.toString(CryptoJS.enc.Utf8);
}

let word ='18719800158';
let key='1234567812345679';
let iv ='1234567812345678';

console.log('最终结果:'+aesEncrypt(word,key,iv));

console.log('------------------------------开始解密------------------------------');

let decode = 'F2AD339655A76FF875FA6FAF02072ACF';
console.log('最终结果:'+aesDecrypt(decode,key,iv));

</script>
</body>
</html>

 

连续折腾三天。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值