html 语言 Web Crypto加密应用实践

html阿木 发布于 2025-06-24 6 次阅读


Web Crypto加密应用实践

随着互联网的快速发展,数据安全和隐私保护成为了越来越重要的话题。Web Crypto API(Web Cryptography API)是现代浏览器提供的一个用于加密、解密、签名和验证等安全操作的接口。本文将围绕Web Crypto API,探讨其在Web应用中的加密应用实践。

Web Crypto API简介

Web Crypto API是Web平台提供的一个用于加密操作的标准接口。它允许开发者在不安装任何额外库的情况下,使用JavaScript在浏览器中执行加密操作。Web Crypto API支持多种加密算法,包括对称加密、非对称加密、哈希函数和数字签名等。

支持的加密算法

- 对称加密:AES-GCM、AES-CBC、AES-KW、ChaCha20-Poly1305、RSA-OAEP、RSA-PSS等。

- 非对称加密:RSA、ECDSA、ECDH等。

- 哈希函数:SHA-256、SHA-384、SHA-512等。

- 数字签名:RSA-PSS、ECDSA等。

实践案例:使用Web Crypto API加密和解密数据

以下是一个使用Web Crypto API进行数据加密和解密的简单示例。

加密数据

javascript

// 生成密钥


async function generateKey() {


const key = await window.crypto.subtle.generateKey(


{


name: "AES-GCM",


length: 256,


},


true,


["encrypt", "decrypt"]


);


return key;


}

// 加密数据


async function encryptData(data, key) {


const iv = window.crypto.getRandomValues(new Uint8Array(12)); // 生成初始化向量


const encrypted = await window.crypto.subtle.encrypt(


{


name: "AES-GCM",


iv: iv,


},


key,


new TextEncoder().encode(data)


);


return { encrypted, iv };


}

// 主函数


async function main() {


const key = await generateKey();


const data = "Hello, Web Crypto!";


const { encrypted, iv } = await encryptData(data, key);


console.log("Encrypted:", new Uint8Array(encrypted));


console.log("IV:", iv);


}

main();


解密数据

javascript

// 解密数据


async function decryptData(encrypted, iv, key) {


const decrypted = await window.crypto.subtle.decrypt(


{


name: "AES-GCM",


iv: iv,


},


key,


encrypted


);


return new TextDecoder().decode(decrypted);


}

// 主函数


async function main() {


const key = await generateKey();


const data = "Hello, Web Crypto!";


const { encrypted, iv } = await encryptData(data, key);


const decryptedData = await decryptData(encrypted, iv, key);


console.log("Decrypted:", decryptedData);


}

main();


实践案例:使用Web Crypto API进行数字签名

以下是一个使用Web Crypto API进行数字签名的示例。

生成签名

javascript

// 生成密钥对


async function generateKeyPair() {


const keyPair = await window.crypto.subtle.generateKey(


{


name: "ECDSA",


namedCurve: "P-256",


},


true,


["sign", "verify"]


);


return keyPair;


}

// 生成签名


async function signData(data, privateKey) {


const signature = await window.crypto.subtle.sign(


{


name: "ECDSA",


hash: "SHA-256",


},


privateKey,


new TextEncoder().encode(data)


);


return signature;


}

// 主函数


async function main() {


const keyPair = await generateKeyPair();


const data = "Hello, Web Crypto!";


const signature = await signData(data, keyPair.privateKey);


console.log("Signature:", signature);


}

main();


验证签名

javascript

// 验证签名


async function verifySignature(data, signature, publicKey) {


const isValid = await window.crypto.subtle.verify(


{


name: "ECDSA",


hash: "SHA-256",


},


publicKey,


signature,


new TextEncoder().encode(data)


);


return isValid;


}

// 主函数


async function main() {


const keyPair = await generateKeyPair();


const data = "Hello, Web Crypto!";


const signature = await signData(data, keyPair.privateKey);


const isValid = await verifySignature(data, signature, keyPair.publicKey);


console.log("Signature is valid:", isValid);


}

main();


总结

Web Crypto API为Web应用提供了强大的加密功能,使得开发者可以在不依赖外部库的情况下,实现数据的加密、解密、签名和验证等安全操作。本文通过几个实践案例,展示了Web Crypto API在Web应用中的加密应用实践。随着Web Crypto API的不断发展,其在Web安全领域的应用将越来越广泛。