要将Java中的AES加密实现转为Web浏览器中使用的实现方式,可以使用JavaScript的Crypto API。以下是一个示例,演示如何在Web浏览器中使用AES对称加密来实现与您提供的Java代码相似的功能。
请注意,这里需要使用Base64编码,因为您的Java代码将加密后的字节数组转换为Base64字符串。
JavaScript AES 加密示例
- 创建AES加密函数:
async function encrypt(plainText, key) {
// 将字符串转换为字节数组
const encoder = new TextEncoder();
const data = encoder.encode(plainText);
// 导入密钥
const importedKey = await window.crypto.subtle.importKey(
"raw",
key,
{ name: "AES-CBC" },
false,
["encrypt"]
);
// 生成随机初始化向量(IV)
const iv = window.crypto.getRandomValues(new Uint8Array(16));
// 使用 AES-CBC 模式进行加密
const encryptedData = await window.crypto.subtle.encrypt(
{
name: "AES-CBC",
iv: iv,
},
importedKey,
data
);
// 将结果转为 Base64 编码格式
let buffer = new Uint8Array(encryptedData);
// 返回包含 IV 和 密文的 Base64 编码字符串
return btoa(String.fromCharCode.apply(null, iv)) + '.' + btoa(String.fromCharCode.apply(null, buffer));
}
// 示例用法
(async () => {
const keyMaterial = crypto.getRandomValues(new Uint8Array(16)); // 生成随机16字节密钥
const encryptedText = await encrypt("Hello World", keyMaterial);
console.log("Encrypted:", encryptedText);
})();
注意事项:
- 在实际应用中,确保安全地管理和存储您的密钥。
- JavaScript 的
Crypto
API 中的importKey
方法用于导入原始数据类型(如上面的示例所示)。 - 本示例使用
AES-CBC
模式,这与其他模式(例如AES-GCM
)有所不同,请根据具体需求选择合适的模式。 - IV(初始化向量)应该是唯一且不可预测,因此我们在每次加密时都生成新的随机值,并将其与密文一起传输。
解密: 如果您需要实现解密功能,可以类似地创建一个解密函数。确保提供正确的IV和秘钥来恢复原始文本。
希望这个简单的示例能帮助您在浏览器中实现AES加密!如果有任何疑问,请随时询问。
内容由零声教学AI助手提供,问题来源于学员提问