JavaScript實現(xiàn)的前端AES加密解密功能【基于CryptoJS】
本文實例講述了JavaScript實現(xiàn)的前端AES加密解密功能。分享給大家供大家參考,具體如下:
js前端AES加密
最近由于項目需求做了一次MITM,突然即使發(fā)現(xiàn)使用HTTPS,也不能保證數(shù)據(jù)傳輸過程中的安全性。 通過中間人攻擊,可以直接獲取到Http協(xié)議的所有內(nèi)容。 于是開始嘗試做一些簡單的加密,在一定程度上保證安全性。
本次采用AES加密數(shù)據(jù),所以客戶端和服務(wù)端使用的相同秘鑰。(僅作為演示,正式環(huán)境推薦使用RSA)
首先準(zhǔn)備一份明文密碼和加密使用的KEY
var source = "ABCDEFG"; var aesKey = "8NONwyJtHesysWpM";
JS加密 padding和mode 需要與服務(wù)端相對應(yīng),否則無法解密
key 為字符串類型,需要處理完再使用
注:PKCS5Padding 和 PKCS7Padding 是一樣的
上段所示的 encryptedData 即為加密后的結(jié)果。
JS解密代碼
encryptedData 為加密后的數(shù)據(jù),
直接通過JS加密后的數(shù)據(jù)是一個對象,無法直接解密的, 需要轉(zhuǎn)換為Base64的字符串后才可解密
服務(wù)端應(yīng)當(dāng)返回Base64之后的加密數(shù)據(jù)
encryptedData = encryptedData.ciphertext.toString(); var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
先來看看運行結(jié)果:

aes.js文件可點擊此處本站下載。
完整測試代碼如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>m.fzitv.net aes.js</title>
</head>
<script src="aes.js"></script>
<body>
<script>
var key = CryptoJS.enc.Utf8.parse("8NONwyJtHesysWpM");
var plaintText = 'ABCDEFGH'; // 明文
var encryptedData = CryptoJS.AES.encrypt(plaintText, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("加密前:"+plaintText);
console.log("加密后:"+encryptedData);
encryptedData = encryptedData.ciphertext.toString();
var encryptedHexStr = CryptoJS.enc.Hex.parse(encryptedData);
var encryptedBase64Str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
var decryptedData = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = decryptedData.toString(CryptoJS.enc.Utf8);
console.log("解密后:"+decryptedStr);
var pwd = "PCsUFtgog9/qpqmqXsuCRQ==";
//加密服務(wù)端返回的數(shù)據(jù)
var decryptedData = CryptoJS.AES.decrypt(pwd, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
console.log("解密服務(wù)端返回的數(shù)據(jù):"+decryptedStr);
</script>
</body>
</html>
代碼中帶入aes.js完整代碼,使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun,可得到上述運行結(jié)果。
PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
在線AES加密/解密工具:
http://tools.jb51.net/password/aes_encode
文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
在線編碼轉(zhuǎn)換工具(utf-8/utf-32/Punycode/Base64):
http://tools.jb51.net/transcoding/decode_encode_tool
BASE64編碼解碼工具:
http://tools.jb51.net/transcoding/base64
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript加密解密技巧匯總》、《JavaScript查找算法技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
- js前端加密庫Crypto-js進行MD5/SHA256/BASE64/AES加解密的方法與示例
- JS使用插件cryptojs進行加密解密數(shù)據(jù)實例
- VueJs里利用CryptoJs實現(xiàn)加密及解密的方法示例
- 使用JS前端加密庫sm-crypto實現(xiàn)國密sm2、sm3和sm4加密與解密
- 前端CryptoJS加密、后端JAVA解密代碼實現(xiàn)參考
- vue項目中使用crypto-js實現(xiàn)加密解密方式
- JS使用 cryptojs加密解密(對稱加密庫)的問題
- vue項目之前端CryptoJS加密、解密代碼示例
- vue用CryptoJS加密,java用CryptoUtil解密
- crypto-js對稱加密解密的使用方式詳解(vue與java端)
相關(guān)文章
利用Javascript裁剪圖片并存儲的簡單實現(xiàn)
裁剪圖片對我們來說是再熟悉不過的了,最近工作中就又遇到了這個需求,所以想著干脆整理下來,方法大家和自己在需要的時候參考學(xué)習(xí),所以這篇文章主要介紹了利用Javascript裁剪圖片并存儲的簡單實現(xiàn),后端PHP處理我用的是THINKPHP框架,需要的朋友可以參考下。2017-03-03
原生javaScript做得動態(tài)表格(注釋寫的很清楚)
因為看公司好多用動態(tài)表格的,所以,我就試著用js做了動態(tài)表格,下面有個不錯的示例,感興趣的朋友可以參考下2013-12-12
JavaScript高級程序設(shè)計(第三版)學(xué)習(xí)筆記6、7章
這篇文章主要介紹了JavaScript高級程序設(shè)計(第三版)學(xué)習(xí)筆記6、7章 的相關(guān)資料,需要的朋友可以參考下2016-03-03
javascript基于原型鏈的繼承及call和apply函數(shù)用法分析
這篇文章主要介紹了javascript基于原型鏈的繼承及call和apply函數(shù)用法,結(jié)合實例形式較為詳細(xì)的分析了javascript中繼承的概念、創(chuàng)建方法以及call和apply函數(shù)的功能與使用技巧,需要的朋友可以參考下2016-12-12
javascript復(fù)制粘貼與clipboardData的使用
window.clipboardData可以實現(xiàn)復(fù)制與粘貼的操作,下面有個小示例,想學(xué)習(xí)的朋友可以參考下2014-10-10

