JavaScript(简称JS)是一种广泛使用的脚本语言,主要用于网页和网络应用的客户端脚本。原生加密指的是在JavaScript中使用内置的加密功能或API来进行数据的加密和解密操作。
// 加密
async function encryptData(data, key) {
const encoder = new TextEncoder();
const encodedData = encoder.encode(data);
const cryptoKey = await window.crypto.subtle.importKey(
"raw",
encoder.encode(key),
{ name: "AES-GCM" },
false,
["encrypt"]
);
const iv = window.crypto.getRandomValues(new Uint8Array(12));
const encryptedData = await window.crypto.subtle.encrypt(
{ name: "AES-GCM", iv },
cryptoKey,
encodedData
);
return { encryptedData, iv };
}
// 解密
async function decryptData(encryptedData, key, iv) {
const decoder = new TextDecoder();
const cryptoKey = await window.crypto.subtle.importKey(
"raw",
new TextEncoder().encode(key),
{ name: "AES-GCM" },
false,
["decrypt"]
);
const decryptedData = await window.crypto.subtle.decrypt(
{ name: "AES-GCM", iv },
cryptoKey,
encryptedData
);
return decoder.decode(decryptedData);
}
// 使用示例
(async () => {
const data = "Hello, World!";
const key = "my-secret-key";
const { encryptedData, iv } = await encryptData(data, key);
const decryptedData = await decryptData(encryptedData, key, iv);
console.log("Original Data:", data);
console.log("Decrypted Data:", decryptedData);
})();
// 生成密钥对
async function generateKeyPair() {
return await window.crypto.subtle.generateKey(
{ name: "RSA-OAEP", modulusLength: 2048, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-256" },
true,
["encrypt", "decrypt"]
);
}
// 加密
async function encryptData(data, publicKey) {
const encoder = new TextEncoder();
const encodedData = encoder.encode(data);
const encryptedData = await window.crypto.subtle.encrypt(
{ name: "RSA-OAEP" },
publicKey,
encodedData
);
return encryptedData;
}
// 解密
async function decryptData(encryptedData, privateKey) {
const decoder = new TextDecoder();
const decryptedData = await window.crypto.subtle.decrypt(
{ name: "RSA-OAEP" },
privateKey,
encryptedData
);
return decoder.decode(decryptedData);
}
// 使用示例
(async () => {
const { publicKey, privateKey } = await generateKeyPair();
const data = "Hello, World!";
const encryptedData = await encryptData(data, publicKey);
const decryptedData = await decryptData(encryptedData, privateKey);
console.log("Original Data:", data);
console.log("Decrypted Data:", decryptedData);
})();
window.crypto.subtle
API来安全地存储和管理密钥。通过以上方法,可以在JavaScript中实现安全的原生加密和解密操作,保护数据的机密性和完整性。
领取专属 10元无门槛券
手把手带您无忧上云