CryptoJS中AES256(CBC)密碼編譯演算法簡單使用__演算法

來源:互聯網
上載者:User
1.CryptoJS指令碼下載

下載地址:http://pan.baidu.com/s/1slwHVLb

2.WordArray (An array of 32-bit words.)

使用AES加密前,先瞭解下WordArray,我把它理解成CryptoJS中定義的 新的 資料類型,叫“單詞數組”。

2.1 : 初始化

var wordArray = CryptoJS.lib.WordArray.create();//建立一個空的 WordArray對象

2.2 : WordArray 對象 —>16進位字串

 var string = wordArray.toString();//預設CryptoJS.enc.Hex,即16進位字串 var string = wordArray.toString(CryptoJS.enc.Utf8);//utf-8字串

2.3 : 16進位字串 —>WordArray對象

var wordArray = CryptoJS.enc.Hex.parse(hexString);

2.4 : WordArray對象—>utf8字串

var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);//等價於2.2中 wordArray.toString(CryptoJS.enc.Utf8);

2.5 : utf8字串—>WordArray對象

 var wordArray = CryptoJS.enc.Utf8.parse(utf8String);

2.6 : WordArray對象—>Base64字串

var base64String = CryptoJS.enc.Base64.stringify(wordArray);

2.7 : Base64字串—>WordArray對象

var wordArray = CryptoJS.enc.Base64.parse(base64String);
3.簡單使用
<script src="<%=request.getContextPath()%>/js/cryptojs/crypto-js.js"></script>
<script>var message = "1_2_3_4_5_6_7_8_9_0";//utf8字串,待加密var iv = CryptoJS.lib.WordArray.random(128 / 8).toString(CryptoJS.enc.Hex);//隨機產生長度為32的16進位字串。IV稱為初始向量,不同的IV加密後的字串是不同的,加密和解密需要相同的IV。var key = "0321ebeba1f75de2d3cd3471af7418a4";//秘鑰。長度32的16進位字串。var cryptkey  = CryptoJS.enc.Hex.parse(key);//將16進位字串轉換為 WordArray對象//或者 //var key = "qwertyuiopasdfgh";//長度16的utf8字串//var cryptkey =  CryptoJS.enc.Utf8.parse(key);//將utf8字串轉換為 WordArray對象//重點是 key要轉換為WordArray對象,加密時要用。//測試var ciphertext = aesEncrypt(message,cryptkey,iv);//加密var decryptedMessage = aesDecrypt(ciphertext,cryptkey,iv);//解密alert(decryptedMessage);//1_2_3_4_5_6_7_8_9_0</script>
<script>//** 加密 **//var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);//params: 注意參數key為WordArray對象//return: 密碼對象 或者 密碼對象Base64字串function aesEncrypt(message,key,iv){    var ciphertext = CryptoJS.AES.encrypt(message, key, {           iv: CryptoJS.enc.Hex.parse(iv),        mode: CryptoJS.mode.CBC,        padding:CryptoJS.pad.Pkcs7     });    return ciphertext;//密碼對象(Obejct類型,非WordArray類型),Base64編碼。    //return ciphertext.toString();//密碼對象的Base64字串}//** 解密 **//var plaintext  = CryptoJS.AES.decrypt(ciphertext, key, cfg);//params: 注意參數ciphertext 必須為 Base64編碼的對象或者字串。function aesDecrypt(ciphertext,key,iv){    var decrypted = CryptoJS.AES.decrypt(ciphertext,key,{         iv: CryptoJS.enc.Hex.parse(iv),        mode: CryptoJS.mode.CBC,        padding:CryptoJS.pad.Pkcs7     });    return decrypted.toString(CryptoJS.enc.Utf8);//WordArray對象轉utf8字串}</script>
4.延伸

AES加密函數 傳回值為 加密對象ciphertext,其屬性:
* ciphertext: ciphertextWordArray,
* key: keyWordArray,
* iv: ivWordArray,
* algorithm: CryptoJS.algo.AES,
* mode: CryptoJS.mode.CBC,
* padding: CryptoJS.pad.PKCS7,
* blockSize: 4,
* formatter: CryptoJS.format.OpenSSL

屬性ciphertext即 密文,可以發現,其為WordArray類型。通過 加密對象.屬性名稱 取值。

function aesEncrypt(message,key,iv){    var ciphertext = CryptoJS.AES.encrypt(message, key, {           iv: CryptoJS.enc.Hex.parse(iv),        mode: CryptoJS.mode.CBC,        padding:CryptoJS.pad.Pkcs7     });    return CryptoJS.enc.Base64.stringify(ciphertext.ciphertext);//密文 轉 Base64字串}//解密函數 稍有改動。function aesDecrypt(crypted,key,iv){    var decrypted = CryptoJS.AES.decrypt({ciphertext: CryptoJS.enc.Base64.parse(crypted)},key,{         iv: CryptoJS.enc.Hex.parse(iv),        mode: CryptoJS.mode.CBC,        padding:CryptoJS.pad.Pkcs7     });    return decrypted.toString(CryptoJS.enc.Utf8);}
4.總結

很多都是自己的理解,希望不會有大的偏差。最近這個項目,遇到了AES加密,才有所瞭解。真是路漫漫其修遠兮啊。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.