AES 加密和解密
此示例演示了使用 Deno 内置的 SubtleCrypto API 进行 AES 加密和解密。
定义要加密的文本
const text = "Hello, Deno 2.0!";
使用 TextEncoder 将文本转换为 Uint8Array(加密需要)
const encoder = new TextEncoder();
const data = encoder.encode(text);
为加密和解密生成 AES-GCM 密钥 我们在此示例中使用 AES-GCM,因为它是一种广泛使用的加密模式,但您也可以使用 AES-CBC 或 AES-CTR 等模式来满足不同的用例。
const key = await crypto.subtle.generateKey(
{
name: "AES-GCM",
length: 256, // 256-bit encryption key for strong security
},
true, // The key is extractable for encryption and decryption
["encrypt", "decrypt"], // Key usages: encryption and decryption
);
为 AES-GCM 生成随机的初始化向量(IV) 每个加密操作的 IV 必须是唯一的,但不需要保密。
const iv = crypto.getRandomValues(new Uint8Array(12)); // 12-byte IV for AES-GCM
使用 AES-GCM 加密文本
const encryptedData = await crypto.subtle.encrypt(
{
name: "AES-GCM",
iv: iv, // Initialization vector must be unique for each encryption
},
key, // The generated key
data, // The text data to encrypt
);
console.log("Encrypted Data:", new Uint8Array(encryptedData)); // Log the encrypted result as a byte array
使用相同的 IV 和密钥将加密数据解密回明文。用于解密的 IV 和密钥必须与用于加密的 IV 和密钥相同
const decryptedData = await crypto.subtle.decrypt(
{
name: "AES-GCM",
iv: iv, // Same IV used for encryption
},
key, // The same key used for encryption
encryptedData, // The encrypted data to decrypt
);
使用 TextDecoder 将解密后的数据转换回字符串
const decryptedText = new TextDecoder().decode(decryptedData);
console.log("Decrypted Text:", decryptedText);
使用 Deno CLI 在本地运行 此示例
deno run https://docs.deno.org.cn/examples/aes-encryption.ts