Vue中使用crypto-js AES對稱加密算法實現(xiàn)加密解密
在數(shù)字加密算法中,通過可劃分為對稱加密和非對稱加密
對稱加密:如AES,DES,3DES
含義:加密和解密使用的是同一把鑰匙。密鑰不能在網絡中傳輸,避免被攔截。如果要傳輸,必須要對密鑰進行非對稱加密再加密一次。
優(yōu)點:算法簡單,加密解密容易,效率高,執(zhí)行快。
缺點:相對來說不算特別安全,只有一把鑰匙,密文如果被攔截,且密鑰也被劫持,那么,信息很容易被破譯。
非對稱加密:如RSA DSA RCC
含義:有兩個鑰匙,及公鑰(Public Key)和私鑰(Private Key)。公鑰和私鑰是成對的存在,如果對原文使用公鑰加密,則只能使用對應的私鑰才能解密。通過私鑰經過一系列算法是可以推導出公鑰的,但是無法通過公鑰反向推倒出私鑰,這個過程的單向的。
優(yōu)點:安全,即使密文被攔截、公鑰被獲取,但是無法獲取到私鑰,也就無法破譯密文。作為接收方,務必要保管好自己的密鑰。
缺點:加密算法及其復雜,安全性依賴算法與密鑰,而且加密和解密效率很低。
下載crypto-js
cnpm i -S crypto-js
局部引用
import CryptoJS from "crypto-js";
加密解密數(shù)據(jù)
前端CBC模式或者ECB模式下的填充方式 Pkcs7,對應后端AES算法模式中的 PKCS5Padding 填充方式
AES算法的ECB模式加密-設置秘鑰
ECB(Electronic Code Book電子密碼本)模式
優(yōu)點:
- 簡單;
- 有利于并行計算;
- 誤差不會被擴散;
缺點:
- 不能隱藏明文的模式
- 可能對明文進行主動攻擊
因此,此模式適于加密小消息。
秘鑰必須為16進制
encryptData() {
// 此處key為16進制
let key = '385f33cb91484b04a177828829081ab7';
console.log('密鑰:', key);
// key格式化處理
key = CryptoJS.enc.Utf8.parse(key);
// 加密內容
const polygonGeojson = {
type: 'Feature',
properties: {},
geometry: {
type: 'Polygon',
coordinates: [
[
[106, 33],
[108.03955078125, 32.2313896627376],
[108.25927734375, 33.15594830078649],
[106, 33]
]
]
}
};
const content = JSON.stringify(polygonGeojson);
console.log('加密前:', polygonGeojson);
// 加密方法
const encryptedContent = CryptoJS.AES.encrypt(content, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
const encStr = encryptedContent.ciphertext.toString();
console.log('加密后:', encStr);
// 解密方法
const decryptedContent = CryptoJS.AES.decrypt(
CryptoJS.format.Hex.parse(encStr),
key,
{
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
);
console.log(
'解密:',
JSON.parse(CryptoJS.enc.Utf8.stringify(decryptedContent))
);
}
AES算法的CBC模式加密-設置秘鑰和偏移量
CBC(Cipher Block Chaining,加密塊鏈)模式
優(yōu)點:
- 不容易主動攻擊
- 安全性好于ECB
- 適合傳輸長度長的報文,是SSL、IPSec的標準。
缺點:
- 不利于并行計算
- 誤差傳遞
- 需要初始化向量IV
CBC模式前、后端需要確定偏移量的值,并且保持一致,這樣才能確保后端解密成功。
encryptData() {
// 此處key為16進制
let key = '385f33cb91484b04a177828829081ab7';
console.log('密鑰:', key);
// key格式化處理
key = CryptoJS.enc.Utf8.parse(key);
// 偏移量長度為16位, 注:偏移量需要與后端定義好,保證一致
let iv_key = '37fa77f6a3b0462d';
let iv = CryptoJS.enc.Utf8.parse(iv_key);
// 加密內容
const polygonGeojson = {
type: 'Feature',
properties: {},
geometry: {
type: 'Polygon',
coordinates: [
[
[106, 33],
[108.03955078125, 32.2313896627376],
[108.25927734375, 33.15594830078649],
[106, 33]
]
]
}
};
const content = JSON.stringify(polygonGeojson);
console.log('加密前:', polygonGeojson);
// 加密方法
const encryptedContent = CryptoJS.AES.encrypt(content, key, {
iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
const encStr = encryptedContent.ciphertext.toString();
console.log('加密后:', encStr);
// 解密方法
const decryptedContent = CryptoJS.AES.decrypt(
CryptoJS.format.Hex.parse(encStr),
key,
{
iv: iv,
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}
);
console.log(
'解密:',
JSON.parse(CryptoJS.enc.Utf8.stringify(decryptedContent))
);
}
參考:
https://www.cnblogs.com/cndarren/p/15108270.html
https://blog.csdn.net/qq_40323256/article/details/116947888
到此這篇關于Vue中使用crypto-js AES對稱加密算法實現(xiàn)加密解密的文章就介紹到這了,更多相關Vue crypto-js AES對稱加密解密內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue使用sass根據(jù)環(huán)境進行樣式判斷區(qū)分方式
這篇文章主要介紹了vue使用sass根據(jù)環(huán)境進行樣式判斷區(qū)分方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
vue2.0+koa2+mongodb實現(xiàn)注冊登錄
這篇文章主要介紹了vue2.0+koa2+mongodb實現(xiàn)注冊登錄功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-04-04
vue插件開發(fā)之使用pdf.js實現(xiàn)手機端在線預覽pdf文檔的方法
這篇文章主要介紹了vue插件開發(fā)之使用pdf.js實現(xiàn)手機端在線預覽pdf文檔的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07
警告[vue-router]?Duplicate?named?routes?definition簡單解決方法
這篇文章主要關于介紹了警告[vue-router]?Duplicate?named?routes?definition的解決方法,這個錯誤提示是因為在Vue Router中定義了重復的路由名稱,需要的朋友可以參考下2023-12-12

