當前位置:ag真人国际官网-ag旗舰厅官方网站 » 密碼管理 » js的aes加密

js的aes加密-ag真人国际官网

發布時間: 2024-11-11 11:22:12

㈠ js中常見的數據加密與解密的方法

加密在我們前端的開發中也是經常遇見的。本文只把我們常用的加密方法進行總結。不去糾結加密的具體實現方式(密碼學,太龐大了)。

常見的加密演算法基本分為這幾類,

rsa加密:rsa加密演算法是一種非對稱加密演算法。在公開密鑰加密和電子商業中rsa被廣泛使用。(這才是正經的加密演算法)

非對稱加密演算法:非對稱加密演算法需要兩個密鑰:公開密鑰(publickey:簡稱公鑰)和私有密鑰(privatekey:簡稱私鑰)。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種演算法叫作非對稱加密演算法。

des全稱為data encryption standard,即數據加密標准,是一種使用密鑰加密的塊演算法

des演算法的入口參數有三個:key、data、mode。其中key為7個位元組共56位,是des演算法的工作密鑰;data為8個位元組64位,是要被加密或被解密的數據;mode為des的工作方式,有兩種:加密或解密。

aes這個標准用來替代原先的des

des/aes我們合並在一起介紹其用法和特點

base64是一種用64個字元來表示任意二進制數據的方法。base64是一種編碼方式而不是加密演算法。只是看上去像是加密而已(嚇唬人)。

㈡ 如何使用cryptojs的aes方法進行加密和解密

首先准備一份明文和秘鑰:
var plainttext = 'aaaaaaaaaaaaaaaa' // 明文
var keystr = 'bbbbbbbbbbbbbbbb' // 一般key為一個字元串


參看官網文檔,aes方法是支持aes-128、aes-192和aes-256的,加密過程中使用哪種加密方式取決於傳入key的類型,否則就會按照aes-256的方式加密。
cryptojs supports aes-128, aes-192, and aes-256. it will pick the variant by the size of the key you pass in. if you use a passphrase, then it will generate a 256-bit key.
由於java就是按照128bit給的,但是由於是一個字元串,需要先在前端將其轉為128bit的才行。
最開始以為使用cryptojs.enc.hex.parse就可以正確地將其轉為128bit的key。但是不然...
經過多次嘗試,需要使用cryptojs.enc.utf8.parse方法才可以將key轉為128bit的。好吧,既然說了是多次嘗試,那麼就不知道原因了,後期再對其進行更深入的研究。
// 字元串類型的key用之前需要用uft8先parse一下才能用
var key = cryptojs.enc.utf8.parse(keystr);


由於後端使用的是pkcs5padding,但是在使用cryptojs的時候發現根本沒有這個偏移,查詢後發現pkcs5padding和pkcs7padding是一樣的東東,使用時默認就是按照pkcs7padding進行偏移的。
// 加密
var encrypteddata = cryptojs.aes.encrypt(plainttext, key, {
mode: cryptojs.mode.ecb,
padding: cryptojs.pad.pkcs7
});


由於cryptojs生成的密文是一個對象,如果直接將其轉為字元串是一個base64編碼過的,在encrypteddata.ciphertext上的屬性轉為字元串才是後端需要的格式。
var encryptedbase64str = encrypteddata.tostring();
// 輸出:' ot8juxwvdlgy=
console.log(encryptedbase64str);

// 需要讀取encrypteddata上的ciphertext.tostring()才能拿到跟java一樣的密文
var encryptedstr = encrypteddata.ciphertext.tostring();
// 輸出:'
console.log(encryptedstr);


由於加密後的密文為128位的字元串,那麼解密時,需要將其轉為base64編碼的格式。
那麼就需要先使用方法cryptojs.enc.hex.parse轉為十六進制,再使用cryptojs.enc.base64.stringify將其變為base64編碼的字元串,此時才可以傳入cryptojs.aes.decrypt方法中對其進行解密。
// 拿到字元串類型的密文需要先將其用hex方法parse一下
var encryptedhexstr = cryptojs.enc.hex.parse(encryptedstr);

// 將密文轉為base64的字元串
// 只有base64類型的字元串密文才能對其進行解密
var encryptedbase64str = cryptojs.enc.base64.stringify(encryptedhexstr);


使用轉為base64編碼後的字元串即可傳入cryptojs.aes.decrypt方法中進行解密操作。
// 解密
var decrypteddata = cryptojs.aes.decrypt(encryptedbase64str, key, {
mode: cryptojs.mode.ecb,
padding: cryptojs.pad.pkcs7
});


經過cryptojs解密後,依然是一個對象,將其變成明文就需要按照utf8格式轉為字元串。
// 解密後,需要按照utf8的方式將明文轉位字元串
var decryptedstr = decrypteddata.tostring(cryptojs.enc.utf8);
console.log(decryptedstr); // 'aaaaaaaaaaaaaaaa'

熱點內容
驅動軟體哪個安卓版好 發布:2024-11-19 10:08:28 瀏覽:703
伺服器一鍵搭建java環境 發布:2024-11-19 10:08:27 瀏覽:729
布丁少兒編程 發布:2024-11-19 09:57:11 瀏覽:98
vb資料庫數組 發布:2024-11-19 09:23:40 瀏覽:828
安卓游戲數據保存在哪裡找 發布:2024-11-19 09:22:02 瀏覽:310
解壓出來的文件亂碼 發布:2024-11-19 09:15:40 瀏覽:940
北航ftp是多少 發布:2024-11-19 09:15:32 瀏覽:822
瀏覽保存密碼如何取消 發布:2024-11-19 09:10:17 瀏覽:90
安卓怎麼關簡訊重復提醒 發布:2024-11-19 09:02:00 瀏覽:636
html與php的區別 發布:2024-11-19 09:00:53 瀏覽:194
网站地图