詳解nodejs與javascript中的aes加密
一、簡(jiǎn)介
1.aes加密簡(jiǎn)單來(lái)說(shuō),在密碼學(xué)中又稱(chēng)Rijndael加密法,是美國(guó)聯(lián)邦政府采用的一種區(qū)塊加密標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)用來(lái)替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。高級(jí)加密標(biāo)準(zhǔn)已然成為對(duì)稱(chēng)密鑰加密中最流行的算法之一。
2.AES的區(qū)塊長(zhǎng)度固定為128 比特,密鑰長(zhǎng)度則可以是128,192或256比特;而Rijndael使用的密鑰和區(qū)塊長(zhǎng)度可以是32位的整數(shù)倍,以128位為下限,256比特為上限。包括AES-ECB,AES-CBC,AES-CTR,AES-OFB,AES-CFB。
3.在這里我們只接受常用的ECB方式 + pkcs7padding(與pkcs5padding值相同)填充加密。
二、應(yīng)用
1.nodejs中aes的使用
var crypto = require('crypto'); var aesutil = module.exports = {}; /** * aes加密 * @param data 待加密內(nèi)容 * @param key 必須為32位私鑰 * @returns {string} */ aesutil.encryption = function (data, key, iv) { iv = iv || ""; var clearEncoding = 'utf8'; var cipherEncoding = 'base64'; var cipherChunks = []; var cipher = crypto.createCipheriv('aes-256-ecb', key, iv); cipher.setAutoPadding(true); cipherChunks.push(cipher.update(data, clearEncoding, cipherEncoding)); cipherChunks.push(cipher.final(cipherEncoding)); return cipherChunks.join(''); } /** * aes解密 * @param data 待解密內(nèi)容 * @param key 必須為32位私鑰 * @returns {string} */ aesutil.decryption = function (data, key, iv) { if (!data) { return ""; } iv = iv || ""; var clearEncoding = 'utf8'; var cipherEncoding = 'base64'; var cipherChunks = []; var decipher = crypto.createDecipheriv('aes-256-ecb', key, iv); decipher.setAutoPadding(true); cipherChunks.push(decipher.update(data, cipherEncoding, clearEncoding)); cipherChunks.push(decipher.final(clearEncoding)); return cipherChunks.join(''); }
2.javascript中aes的使用
下載第三方庫(kù)Crypto-js.js git地址:https://github.com/brix/crypto-js
引入src下的crypto-js.js,加密代碼如下:
var key = "12345678" //秘鑰必須為:8/16/32位 var message = "123456"; //加密 var encrypt = CryptoJS.AES.encrypt(message, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); console.log("value: "+encrypt); //解密 var decrypt = CryptoJS.AES.decrypt(encrypt, CryptoJS.enc.Utf8.parse(key), { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); console.log("value: "+decrypt.toString(CryptoJS.enc.Utf8));
原文作者:西安.王磊
原文出處:http://vipstone.cnblogs.com/
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。
- 兩種JavaScript的AES加密方式(可與Java相互加解密)
- Node.js中AES加密和其它語(yǔ)言不一致問(wèn)題解決辦法
- 原生js的RSA和AES加密解密算法
- JavaScript實(shí)現(xiàn)的前端AES加密解密功能【基于CryptoJS】
- JS實(shí)現(xiàn)AES加密并與PHP互通的方法分析
- php實(shí)現(xiàn)基于openssl的加密解密方法
- PHP 7.1中利用OpenSSL代替Mcrypt加解密的方法詳解
- php基于openssl的rsa加密解密示例
- PHP中使用OpenSSL生成證書(shū)及加密解密
- Js通過(guò)AES加密后PHP用Openssl解密的方法
相關(guān)文章
js算法實(shí)例之字母大小寫(xiě)轉(zhuǎn)換
實(shí)現(xiàn)javascript?英文首字母大寫(xiě)有多種方法,下面這篇文章主要給大家介紹了關(guān)于js算法實(shí)例之字母大小寫(xiě)轉(zhuǎn)換的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12JavaScript解決浮點(diǎn)數(shù)計(jì)算不準(zhǔn)確問(wèn)題的方法分析
這篇文章主要介紹了JavaScript解決浮點(diǎn)數(shù)計(jì)算不準(zhǔn)確問(wèn)題的方法,結(jié)合實(shí)例形式分析了javascript浮點(diǎn)數(shù)運(yùn)算精度誤差的原因以及相關(guān)的解決方法與具體操作技巧,需要的朋友可以參考下2018-07-07js操作table中tr的順序?qū)崿F(xiàn)上移下移一行的效果
這篇文章主要介紹了js操作table中tr的順序?qū)崿F(xiàn)上移下移一行的效果 ,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11javascript實(shí)現(xiàn)簡(jiǎn)單滾動(dòng)窗口
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)單滾動(dòng)窗口,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06javascript實(shí)現(xiàn)拖拽并替換網(wǎng)頁(yè)塊元素
實(shí)現(xiàn)類(lèi)似于學(xué)生換座位的效果,將網(wǎng)頁(yè)內(nèi)的兩個(gè)元素通過(guò)拖拽的方式互換。2009-11-11只有 20 行的 JavaScript 模板引擎實(shí)例詳解
這篇文章主要介紹了只有 20 行的 JavaScript 模板引擎,結(jié)合實(shí)例形式分析了JavaScript 模板引擎實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-05-05原生js實(shí)現(xiàn)彈窗消息動(dòng)畫(huà)
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)彈窗消息動(dòng)畫(huà),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11js獲取本機(jī)的外網(wǎng)/廣域網(wǎng)ip地址完整源碼
通過(guò)js獲取本機(jī)的外網(wǎng)和廣域網(wǎng)ip地址的方法有很多,本文為大家介紹個(gè)不錯(cuò)的方法,希望對(duì)大家有所幫助2013-08-08