包含算法種類:MD5算法/sha1算法、base64加密和解密、Hmac熔号、AES、Diffie-Hellman
AES:常用的對稱加密算法鸟整,加密解密都用一個(gè)秘鑰,需要自己封裝函數(shù)
MD5算法:常用的哈希算法朦蕴,用于給任意數(shù)據(jù)一個(gè)"簽名"
sha1算法:哈希加密篮条,對強(qiáng)行攻擊的強(qiáng)度更大弟头,但是循環(huán)步驟比MD5多,處理的緩存大涉茧,所以相同硬件下赴恨,運(yùn)行速度比MD5慢
Hmac:哈希算法,可以利用MD5和sha1等哈希算法伴栓,但是額外需要一個(gè)秘鑰伦连,可以理解為用隨機(jī)數(shù)'增強(qiáng)’的哈希算法
Diffie-Hellman:一種密鑰交換協(xié)議,在雙方不泄露密鑰的情況下協(xié)商出一個(gè)密鑰
主要總結(jié)AES算法
-
引入到crypto.js
npm install crypto-js import CryptoJS from 'crypto-js/crypto-js'
-
加密
import CryptoJS from 'crypto-js' export const encrypt = (word,key) => { var key = CryptoJS.enc.Utf8.parse(key); var srcs = CryptoJS.enc.Utf8.parse(word); var encrypted = CryptoJS.AES.encrypt(srcs, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 // 后臺用的是pad.Pkcs5,前臺對應(yīng)為Pkcs7 }); return encrypted.toString();
}
-
解密
export const decrypt = (word,key) => { var key = CryptoJS.enc.Utf8.parse(key); var decrypt = CryptoJS.AES.decrypt(word, key, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7 }); return CryptoJS.enc.Utf8.stringify(decrypt).toString(); }
例如
-
請求頭使用加密钳垮,需與后臺商量
import Crypto from './crypto'; headersConfig = { 'sign': escape(Crypto.encryptByDES("jU7dDd0+68" + new Date().getTime(), "k8!MZms@")), 'ver': '1.0.6', 'os': 'web', 'Content-Type': 'application/json' }
-
Tip
escape() 函數(shù)可對字符串進(jìn)行編碼惑淳,這樣就可以在所有的計(jì)算機(jī)上讀取該字符串。 unescape() 函數(shù)可對通過 escape() 編碼的字符串進(jìn)行解碼饺窿。 JS內(nèi)置全局函數(shù)