AES 簡介
密碼學中的進階加密標準(Advanced Encryption Standard,AES),又稱進階加密標準Rijndael加密法,
是美國聯邦政府採用的一種區塊加密標準。這個標準用來替代原先的DES,已經被多方分析且廣為全世界
所使用。經過五年的甄選流程,進階加密標準由美國國家標準與技術研究院 (NIST)於2001年11月26日
發佈於FIPS PUB197,並在2002年5月26日成為有效標準。2006年,進階加密標準已然成為對稱金鑰密碼編譯
中最流行的演算法之一。該演算法為比利時密碼學家Joan Daemen和VincentRijmen所設計,結合兩位作者的名
字,以Rijndael之命名之,投稿進階加密標準的甄選流程。(Rijdael的發音近於 “Rhinedoll”。) AES加密模式和填充方式(其實還有還幾種填充方式沒寫上,開始時候也在這裡繞了一下)
演算法/模式/填充 —————-16位元組加密後資料長度 ——不滿16位元組加密後長度
AES/CBC/NoPadding ——-16 ——————————-不支援
AES/CBC/PKCS5Padding ——-32 ——————————-16
AES/CBC/ISO10126Padding ——-32 ——————————-16
AES/CFB/NoPadding ——-16 ——————————-未經處理資料長度
AES/CFB/PKCS5Padding ——- 32 ——————————-16
AES/CFB/ISO10126Padding ——-32 ——————————-16
AES/ECB/NoPadding ——-16 ——————————-不支援
AES/ECB/PKCS5Padding ——-32 ——————————-16
AES/ECB/ISO10126Padding ——-32 ——————————- 16
AES/OFB/NoPadding ——-16 ——————————-未經處理資料長度
AES/OFB/PKCS5Padding ——- 32 ——————————-16
AES/OFB/ISO10126Padding ——- 32 ——————————-16
AES/PCBC/NoPadding ——-16 ——————————-不支援
AES/PCBC/PKCS5Padding ——-32 ——————————- 16
AES/PCBC/ISO10126Padding ——-32 ——————————-16
更多關於加密模式內容:http://blog.sina.com.cn/s/blog_679daa6b0100zmpp.html Javascript端代碼:
<script src="aes.js"></script><script src="pad-zeropadding.js"></script><script>var data = "Test String";var key = CryptoJS.enc.Latin1.parse('1234567812345678');var iv = CryptoJS.enc.Latin1.parse('1234567812345678');//加密var encrypted = CryptoJS.AES.encrypt(data,key,{iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding});document.write(encrypted.ciphertext);document.write('<br/>');document.write(encrypted.key);document.write('<br/>');document.write(encrypted.iv);document.write('<br/>');document.write(encrypted.salt);document.write('<br/>');document.write(encrypted);document.write('<br/>');//解密var decrypted = CryptoJS.AES.decrypt(encrypted,key,{iv:iv,padding:CryptoJS.pad.ZeroPadding});console.log(decrypted.toString(CryptoJS.enc.Utf8));</script>
第二種:
//AES-128-CBC加密模式,key需要為16位,key和iv可以一樣 function encrypt(data) { var key = CryptoJS.enc.Latin1.parse('dufy20170329java'); var iv = CryptoJS.enc.Latin1.parse('dufy20170329java'); return CryptoJS.AES.encrypt(data, key, {iv:iv,mode:CryptoJS.mode.CBC,padding:CryptoJS.pad.ZeroPadding}).toString(); }
Vue中 使用 CryptoJS 完成加密
// 引入aes加密import CryptoJS from 'crypto-js'Vue.prototype.$crypto = CryptoJS;// Encrypt CryptoJS.pad.Pkcs7var key = this.$crypto.enc.Utf8.parse('xxxxx'); // 與後台統一var iv = this.$crypto.enc.Utf8.parse('16-Bytes--String'); // 與後台統一var ciphertext = this.$crypto.AES.encrypt(data, key,{ iv:iv, mode:this.$crypto.mode.CBC, // 根據上面得對應模式修改 padding:this.$crypto.pad.Pkcs7 // 根據上面對應模式修改}).toString();
aes,CryptoJS 下載