前言
什么是AES:
AES
是一种对称加密标准,用于保护电子数据。它是一种在全球范围内广泛使用的加密算法,被认为是目前最安全的对称加密算法之一。- AES提供了几种不同的密钥长度选项(128 比特、192 比特和 256 比特),其中 128 比特的密钥长度是最常用的。
AES
的主要特点包括高度的安全性、高效性能和易于实现。它在保护敏感数据、加密通信以及在安全协议中广泛应用。在使用 AES进行加密时,重要的是选择合适的模式(如ECB
或CBC
)和正确管理密钥以及初始化向量(IV),以确保安全性和数据完整性。
提示:以下是本篇文章正文内容,下面案例可供参考
一、ECB和CBC的区别
ECB(电子密码本模式)
- 块处理方式:
ECB 模式将整个明文分割成固定大小的块(比如 128 位),然后每个块都独立加密。这意味着相同的明文块将总是被加密为相同的密文块,不考虑其它块的影响。 - 并行处理:
由于块之间没有依赖关系,ECB 模式可以很容易地并行处理多个块,适合硬件加速和多线程环境。 - 缺点:
主要的缺点是安全性较差,特别是对于长时间重复的纯文本,会产生明显的模式,容易受到密码分析的攻击。
CBC(密码块链模式)
- 块处理方式:
CBC 模式需要一个初始化向量(IV),首先将 IV 异或(XOR)到第一个明文块,然后将结果加密。接下来,将上一步的密文块与当前明文块异或,再进行加密,依此类推。 - 数据依赖:
CBC 模式中,每个密文块的加密依赖于前一个密文块的内容,因此每个块的加密结果会影响后续块的加密结果。这种依赖性增加了安全性,因为即使相同的明文块在不同位置被加密,其密文块也会不同。 - 适用性:
CBC 模式在保证安全性的同时,较为适合传输较短的消息,但是需要注意处理最后一个块的填充问题。
二、使用步骤
1.引入crypto-js 库
代码如下(示例):npm install crypto-js --save-dev
ECB模式:
ECB模式:
import CryptoJS from "crypto-js";
export default {
// 加密
const encrypt = (word, keyStr) => {
keyStr = keyStr ? keyStr : "默认密钥";
let key = CryptoJS.enc.Utf8.parse(keyStr);
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return encrypted.toString();
},
// 解密
const decrypt = (word, keyStr) => {
keyStr = keyStr ? keyStr : "默认密钥";
var key = CryptoJS.enc.Utf8.parse(keyStr);
var decrypt = CryptoJS.AES.decrypt(word, key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Utf8.stringify(decrypt).toString();
}
};
CBC模式:
CBC模式:
import CryptoJS from "crypto-js";
export default {
// 加密
const encrypt = (word, keyStr, ivStr) => {
keyStr = keyStr ? keyStr : "默认密钥";
ivStr = ivStr ? ivStr : "默认偏移量";
let key = CryptoJS.enc.Utf8.parse(keyStr);
let iv = CryptoJS.enc.Utf8.parse(ivStr);
let srcs = CryptoJS.enc.Utf8.parse(word);
let encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
return encrypted.toString();
},
// 解密
const decrypt = (word, keyStr, ivStr) => {
keyStr = keyStr ? keyStr : "默认密钥";
ivStr = ivStr ? ivStr : "默认偏移量";
var key = CryptoJS.enc.Utf8.parse(keyStr);
let iv = CryptoJS.enc.Utf8.parse(ivStr);
var decrypt = CryptoJS.AES.decrypt(word, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.ZeroPadding
});
return decrypt.toString(CryptoJS.enc.Utf8);
}
};
//使用方法
const decrypted = decrypt(data, "密钥", "偏移量");
总结
如果此文章对您有帮助 ,请点赞关注一下,祝您生活愉快