關於CryptoJS中md5加密以及aes加密的隨筆

最近項目中用到了各種加密,其中就包括從沒有接觸過得aes加密,因此從網上各種查,官方的一種說法:

高級加密標準(英語: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了。

說實話,踩了不少的坑,因爲aes有好幾種模式、補碼方式,因此參考了好多資料,有一篇寫的挺好的,詳細的介紹了一下各個步驟,https://zhidao.baidu.com/question/1819427615658816228.html,有想了解的可以看看,我們是用的CBC模式,AES-128bit, Pkcs7補碼方式(後臺有可能是PKCS5Padding,是一樣的),一開始後臺設定的key是10位,他們都可以加密和解密,但是我用了就是不行,我覺得肯定是我沒有處理好,但是最終實在沒辦法大家都改成16位,就對了,可以跟後臺對上了。貼代碼:

 

//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開頭的是補碼方式。

CryptoJs還有md5加密我們也用到了,這個比較簡單,先引用md5.js。

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

好了,寫完了,主要是記錄一下,寫的挺不詳細的,大家湊合看吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章