JavaScript 语言 如何使用Web Crypto API

JavaScript阿木 发布于 2025-06-26 5 次阅读


摘要:随着Web技术的发展,前端安全越来越受到重视。Web Crypto API作为Web平台提供的一套加密和哈希算法,为开发者提供了强大的加密功能。本文将围绕JavaScript语言,详细介绍Web Crypto API的使用方法、应用场景以及实践案例。

一、

Web Crypto API是Web平台提供的一套加密和哈希算法,旨在为开发者提供安全、高效的加密解决方案。它支持多种加密算法,包括对称加密、非对称加密、哈希算法等。在JavaScript中,我们可以通过Web Crypto API实现数据的加密、解密、签名、验证等功能。

二、Web Crypto API概述

1. 对称加密

对称加密是指加密和解密使用相同的密钥。Web Crypto API提供了以下对称加密算法:

- AES-GCM:支持128位、192位和256位密钥长度,提供加密和消息认证码(MAC)功能。

- AES-CBC:支持128位、192位和256位密钥长度,提供加密功能。

- AES-CFB:支持128位、192位和256位密钥长度,提供加密功能。

- AES-OFB:支持128位、192位和256位密钥长度,提供加密功能。

2. 非对称加密

非对称加密是指加密和解密使用不同的密钥。Web Crypto API提供了以下非对称加密算法:

- RSA-PSS:支持2048位和3072位密钥长度,提供签名和验证功能。

- RSA-OAEP:支持2048位和3072位密钥长度,提供加密和解密功能。

- ECDSA:支持P-256、P-384和P-521曲线,提供签名和验证功能。

3. 哈希算法

Web Crypto API提供了以下哈希算法:

- SHA-256:提供256位哈希值。

- SHA-384:提供384位哈希值。

- SHA-512:提供512位哈希值。

三、Web Crypto API使用方法

1. 获取加密算法

javascript

crypto.subtle.getAlgorithmInfo(algorithm).then(info => {


console.log(info);


});


2. 生成密钥

javascript

crypto.subtle.generateKey(


{


name: "AES-GCM",


length: 256


},


true,


["encrypt", "decrypt"]


).then(key => {


console.log(key);


});


3. 加密数据

javascript

const data = new TextEncoder().encode("Hello, world!");


crypto.subtle.encrypt(


{


name: "AES-GCM",


iv: window.crypto.getRandomValues(new Uint8Array(12))


},


key,


data


).then(encrypted => {


console.log(encrypted);


});


4. 解密数据

javascript

crypto.subtle.decrypt(


{


name: "AES-GCM",


iv: window.crypto.getRandomValues(new Uint8Array(12))


},


key,


encrypted


).then(decrypted => {


console.log(new TextDecoder().decode(decrypted));


});


5. 签名数据

javascript

crypto.subtle.sign(


{


name: "RSA-PSS",


saltLength: 32


},


privateKey,


new TextEncoder().encode("Hello, world!")


).then(signature => {


console.log(signature);


});


6. 验证签名

javascript

crypto.subtle.verify(


{


name: "RSA-PSS",


saltLength: 32


},


publicKey,


signature,


new TextEncoder().encode("Hello, world!")


).then(valid => {


console.log(valid);


});


四、Web Crypto API应用场景

1. 数据传输加密

在Web应用中,我们可以使用Web Crypto API对敏感数据进行加密,确保数据在传输过程中的安全性。

2. 用户认证

Web Crypto API可以用于生成和验证数字签名,实现用户认证。

3. 数据存储加密

在本地存储敏感数据时,我们可以使用Web Crypto API对数据进行加密,防止数据泄露。

五、实践案例

以下是一个使用Web Crypto API实现数据传输加密的实践案例:

1. 生成密钥对

javascript

crypto.subtle.generateKey(


{


name: "RSA-OAEP",


modulusLength: 2048,


publicExponent: new Uint8Array([0x01, 0x00, 0x01]),


hash: "SHA-256"


},


true,


["encrypt", "decrypt"]


).then(keyPair => {


const publicKey = keyPair.publicKey;


const privateKey = keyPair.privateKey;


// 将公钥和私钥存储到服务器或本地存储


});


2. 加密数据

javascript

const data = new TextEncoder().encode("Hello, world!");


crypto.subtle.encrypt(


{


name: "RSA-OAEP",


label: new Uint8Array(16)


},


publicKey,


data


).then(encrypted => {


// 将加密后的数据发送到服务器


});


3. 解密数据

javascript

crypto.subtle.decrypt(


{


name: "RSA-OAEP",


label: new Uint8Array(16)


},


privateKey,


encrypted


).then(decrypted => {


console.log(new TextDecoder().decode(decrypted));


});


六、总结

Web Crypto API为JavaScript开发者提供了一套强大的加密工具,可以帮助我们实现数据加密、解密、签名、验证等功能。在实际应用中,我们可以根据需求选择合适的加密算法和密钥管理方式,确保数据的安全性和可靠性。本文详细介绍了Web Crypto API的使用方法、应用场景以及实践案例,希望对开发者有所帮助。