微信受權時會用到加解密比較多,當後端寫好連接,讓前端去獲取惟一標識openid,就能夠實現微信受權,可是爲了安全起見,最好不要把獲取到的信息裸露在網址上面,因此後端須要加密用戶的信息,讓前端去解密。css
較爲安全的加密方式:前端
des加密方式vue
CBC是modenpm
PKCS5Padding是padding schemes後端
解密前須要後端提供的是加密前數據(方便去對照解出來數據是否正確),加密後數據,祕鑰,還有iv偏移量,不過通常都要本身一個一個的去試。我用過的就是des/CBC/Paddingkey數組
步驟以下:安全
能夠用npm進行下載,而後能夠編寫一個加解密的工具類微信
npm install crypto-js
複製代碼
1.引入crypto.js插件工具
<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script>
複製代碼
2.就是要解密執行的代碼加密
<script>
window.onload = function () {
//須要加密的內容
let value = '加密地址'
let jiami = escape(value)
console.log('加密數據:',jiami)
let str1 = encryptByDES(jiami);
console.log('加密後的數據:',str1.toString().toUpperCase())
let str2 = encodeURI(decryptByDESModeEBC(str1));
console.log('解密後的數據:',str2)
}
//加密的私鑰
注意:key和iv咱們均可以更換,可是須要保證的是加解密的key和iv保持一致
var key = '祕鑰';
var iv = '偏移量值'
// DES加密
function encryptByDES(message) {
//把私鑰轉換成16進制的字符串
var keyHex = CryptoJS.enc.Utf8.parse(key);
//模式爲ECB padding爲Pkcs7
var encrypted = CryptoJS.DESede.encrypt(message, keyHex, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Paddingkey
});
//加密出來是一個16進制的字符串
// var result_value = CryptoJS.enc.Base64.parse(result_value)
// // var word2 = RSAdecrypt(parseStr)
// var parseStr = words.toString(CryptoJS.enc.UTF-8)
return encrypted.ciphertext.toString();
}
//DES ECB模式解密
function decryptByDESModeEBC(ciphertext) {
//把私鑰轉換成16進制的字符串
var keyHex = CryptoJS.enc.Utf8.parse(key);
//把須要解密的數據從16進制字符串轉換成字符byte數組
var decrypted = CryptoJS.DESede.decrypt({
ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
}, keyHex, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Paddingkey
});
//以utf-8的形式輸出解密事後內容
// var value = CryptoJS.enc.Base64.parse(value)
var result_value = decrypted.toString(CryptoJS.enc.Utf8)
// var result_value = CryptoJS.enc.Base64.parse(result_value)
// // var word2 = RSAdecrypt(parseStr)
// var parseStr = words.toString(CryptoJS.enc.UTF-8)
return result_value
}
</script>
複製代碼
我在使用vuejs作一個受權功能的時候就用到過,發現這個crypto-js仍是挺不錯的。