JavaScript實(shí)現(xiàn)加密與解密詳解
目前原生JS貌似并沒(méi)有提供MD5計(jì)算相關(guān)的函數(shù)方法,只能自己實(shí)現(xiàn)或者使用前輩大神寫(xiě)好的。
一、使用crypto.js庫(kù)進(jìn)行加密
GitHub的 https://github.com/brix/crypto-js 上下載該js。
它可以單獨(dú)引入所需要加密方式的js;也可以引入一個(gè)crypto-js.js 這個(gè)文件,它相當(dāng)于引入了所有的加密方式。
用法:
<script type="text/javascript" src="path-to/bower_components/crypto-js/crypto-js.js"></script> <script type="text/javascript"> var encrypted = CryptoJS.AES(...); var encrypted = CryptoJS.SHA256(...); </script>
1、舉例:
Hash加密:
//加密實(shí)例一 console.log("加密結(jié)果一 MD5:"+CryptoJS.MD5("你好")); //加密實(shí)例二 var pwd="passwor"; console.log("加密結(jié)果二 Hmac-MD5: "+CryptoJS.HmacMD5("你好",pwd));
AES對(duì)稱加密:
普通文本加密
// 加密 var ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString(); // 解密 var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); var originalText = bytes.toString(CryptoJS.enc.Utf8); console.log(originalText); // 'my message'
對(duì)象加密
var data = [{id: 1}, {id: 2}] // 加密 var ciphertext = CryptoJS.AES.encrypt(JSON.stringify(data), 'secret key 123').toString(); // 解密 var bytes = CryptoJS.AES.decrypt(ciphertext, 'secret key 123'); var decryptedData = JSON.parse(bytes.toString(CryptoJS.enc.Utf8)); console.log(decryptedData); // [{id: 1}, {id: 2}]
Custom Key and IV
var key = CryptoJS.enc.Utf8.parse('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); //密鑰 var iv = CryptoJS.enc.Utf8.parse('1234567812345678'); // 加密 var encrypted = CryptoJS.AES.encrypt("Message", key, { iv: iv }); // 解密 var decrypted =CryptoJS.AES.decrypt(encrypted,key, { iv:iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7 }); var originalText = decrypted.toString(CryptoJS.enc.Utf8);
Block Modes and Padding
var key = CryptoJS.enc.Utf8.parse('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'); //密鑰 var iv = CryptoJS.enc.Utf8.parse('1234567812345678'); var encrypted =CryptoJS.AES.encrypt("Message", ,key, { iv:iv, mode:CryptoJS.mode.CBC, padding:CryptoJS.pad.Pkcs7 }); //返回的是base64格式的密文
2、API
See: https://cryptojs.gitbook.io/docs/
編碼工具:
var words = CryptoJS.enc.Base64.parse("SGVsbG8sIFdvcmxkIQ=="); ?var base64 = CryptoJS.enc.Base64.stringify(words); ? var words = CryptoJS.enc.Hex.parse("48656c6c6f2c20576f726c6421"); ?var hex = CryptoJS.enc.Hex.stringify(words); ? var words = CryptoJS.enc.Utf8.parse(""); ?var utf8 = CryptoJS.enc.Utf8.stringify(words);
二、使用JavaScript-MD5庫(kù)進(jìn)行加密
GitHub的 https://github.com/blueimp/JavaScript-MD5 上下載該js。
舉例:
Calculate the (hex-encoded) MD5 hash of a given string value:
var hash = md5('value') // "2063c1608d6e0baf80249c42e2be5804" var v1= md5('{"name":"嘻嘻嘻嘻嘻嘻嘻嘻嘻","age":22}'); //56b21847ed32d2d96cf74077b22342eb
Calculate the (hex-encoded) HMAC-MD5 hash of a given string value and key:
var hash = md5('value', 'key') // "01433efd5f16327ea4b31144572c67f6"
Calculate the raw MD5 hash of a given string value:
var hash = md5('value', null, true)
Calculate the raw HMAC-MD5 hash of a given string value and key:
var hash = md5('value', 'key', true)
到此這篇關(guān)于JavaScript實(shí)現(xiàn)加密與解密詳解的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
寫(xiě)了10年的Javascript也未必全了解的連續(xù)賦值運(yùn)算
很喜歡 蔡蔡 的這個(gè)標(biāo)題,實(shí)際蔡蔡已經(jīng)分析過(guò)了,這里借用了。或許有點(diǎn)標(biāo)題黨的意思??赐昃椭恕?/div> 2011-03-03document節(jié)點(diǎn)對(duì)象的獲取方式示例介紹
如果要操作一個(gè)元素,首先要獲取到它,下面為大家介紹下document節(jié)點(diǎn)對(duì)象的獲取方式,感興趣的朋友不要錯(cuò)過(guò)2013-12-12微信小程序使用websocket通訊的demo,含前后端代碼,親測(cè)可用
這篇文章主要介紹了微信小程序使用websocket通訊的demo,含前后端代碼,親測(cè)可用,需要的朋友可以參考下2019-05-05微信小程序?qū)崿F(xiàn)頁(yè)面導(dǎo)航的方法詳解
這篇文章主要為大家詳細(xì)介紹一下微信小程序?qū)崿F(xiàn)頁(yè)面導(dǎo)航的幾種方法以及幫助大家掌握如何使用頁(yè)面之間的導(dǎo)航跳轉(zhuǎn),感興趣的可以了解一下2022-07-07JS實(shí)現(xiàn)彈出浮動(dòng)窗口(支持鼠標(biāo)拖動(dòng)和關(guān)閉)實(shí)例詳解
這篇文章主要介紹了JS實(shí)現(xiàn)彈出浮動(dòng)窗口,可支持鼠標(biāo)拖動(dòng)和關(guān)閉的功能,界面美觀大方,涉及javascript動(dòng)態(tài)創(chuàng)建對(duì)話框的相關(guān)技巧,需要的朋友可以參考下2015-08-08html5 canvas js(數(shù)字時(shí)鐘)實(shí)例代碼
這篇文章主要介紹了html5 canvas js(數(shù)字時(shí)鐘)實(shí)例代碼,有需要的朋友可以參考一下2013-12-12JavaScript制作簡(jiǎn)單網(wǎng)頁(yè)計(jì)算器
這篇文章主要為大家詳細(xì)介紹了JavaScript制作簡(jiǎn)單網(wǎng)頁(yè)計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08最新評(píng)論