关于CryptoJS中md5加密以及aes加密的随笔

最近项目中用到了各类加密,其中就包括从没有接触过得aes加密,所以从网上各类查,官方的一种说法:html

高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。通过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。算法

很显然,没啥卵用。最后找到了一个CryptoJS的包,下载:https://code.google.com/archive/p/crypto-js/downloads, 介绍:  https://code.google.com/archive/p/crypto-js/,  包括各类加密,在这也就说说aes了。json

说实话,踩了很多的坑,由于aes有好几种模式、补码方式,所以参考了好多资料,有一篇写的挺好的,详细的介绍了一下各个步骤,https://zhidao.baidu.com/question/1819427615658816228.html,有想了解的能够看看,咱们是用的CBC模式,AES-128bit, Pkcs7补码方式(后台有多是PKCS5Padding,是同样的),一开始后台设定的key是10位,他们均可以加密和解密,可是我用了就是不行,我以为确定是我没有处理好,可是最终实在没办法你们都改为16位,就对了,能够跟后台对上了。贴代码:google

 

//aes加密
function encrypt(word) {
    var key = CryptoJS.enc.Utf8.parse("1234567890000000"); //16位
    var iv = CryptoJS.enc.Utf8.parse("1234567890000000");
    var encrypted = '';
    if (typeof(word) == 'string') {
        var srcs = CryptoJS.enc.Utf8.parse(word);
        encrypted = CryptoJS.AES.encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        });
    } else if (typeof(word) == 'object') {//对象格式的转成json字符串
        data = JSON.stringify(word);
        var srcs = CryptoJS.enc.Utf8.parse(data);
        encrypted = CryptoJS.AES.encrypt(srcs, key, {
            iv: iv,
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7
        })
    }
    return encrypted.ciphertext.toString();
}
// aes解密
function decrypt(word) {
    var key = CryptoJS.enc.Utf8.parse("1234567890000000"); 
    var iv = CryptoJS.enc.Utf8.parse("1234567890000000");
    var encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    var srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    var decrypt = CryptoJS.AES.decrypt(srcs, key, {
        iv: iv,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

 

加密解密的key和iv必须是一致的,前台后台的加密方式也必须是一致的,否则确定解不对,说实话我折腾了很久,终于好了。由于CryptoJS默认就是CBC模式和Pkcs补码,因此我只用aes.js就能够,若是你们用的是别的模式和补码方式,还要引用相应的js。加密

 

 

mode开头的是模式,pad开头的是补码方式。spa

CryptoJs还有md5加密咱们也用到了,这个比较简单,先引用md5.js。code

// md5
function md5encode(word) {
    return CryptoJS.MD5(word).toString();
}

好了,写完了,主要是记录一下,写的挺不详细的,你们凑合看吧。htm

相关文章
相关标签/搜索