JavaScript 语言 数据加密解密语法

JavaScript阿木 发布于 21 天前 3 次阅读


摘要:随着互联网的快速发展,数据安全成为了一个至关重要的议题。JavaScript 作为前端开发的主要语言,其数据加密解密技术在保障数据安全方面发挥着重要作用。本文将围绕 JavaScript 语言的数据加密解密语法,详细介绍几种常用的加密算法及其实现方法。

一、

JavaScript 数据加密解密技术是保障数据安全的重要手段,它可以将敏感数据转换为不可读的密文,防止数据在传输或存储过程中被非法获取。本文将介绍几种在 JavaScript 中常用的加密算法,包括对称加密、非对称加密和哈希算法,并详细讲解其语法和实现方法。

二、对称加密

对称加密是指加密和解密使用相同的密钥。在 JavaScript 中,我们可以使用 Web Crypto API 来实现对称加密。

1. AES(高级加密标准)

AES 是一种常用的对称加密算法,支持128位、192位和256位密钥长度。

javascript

// 导入Web Crypto API


const crypto = require('crypto');

// 设置密钥和算法


const key = crypto.randomBytes(32); // 生成32字节密钥


const algorithm = 'aes-256-cbc';

// 加密函数


function encrypt(text) {


const cipher = crypto.createCipheriv(algorithm, Buffer.from(key), Buffer.alloc(16, 0));


let encrypted = cipher.update(text);


encrypted = Buffer.concat([encrypted, cipher.final()]);


return encrypted.toString('hex');


}

// 解密函数


function decrypt(text) {


let encryptedText = Buffer.from(text, 'hex');


const decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), Buffer.alloc(16, 0));


let decrypted = decipher.update(encryptedText);


decrypted = Buffer.concat([decrypted, decipher.final()]);


return decrypted.toString();


}

// 测试


const originalText = 'Hello, world!';


const encryptedText = encrypt(originalText);


console.log('Encrypted:', encryptedText);


const decryptedText = decrypt(encryptedText);


console.log('Decrypted:', decryptedText);


2. DES(数据加密标准)

DES 是一种经典的对称加密算法,使用56位密钥。

javascript

// 导入Web Crypto API


const crypto = require('crypto');

// 设置密钥和算法


const key = crypto.randomBytes(8); // 生成8字节密钥


const algorithm = 'des-cbc';

// 加密函数


function encrypt(text) {


const cipher = crypto.createCipheriv(algorithm, Buffer.from(key), Buffer.alloc(8, 0));


let encrypted = cipher.update(text);


encrypted = Buffer.concat([encrypted, cipher.final()]);


return encrypted.toString('hex');


}

// 解密函数


function decrypt(text) {


let encryptedText = Buffer.from(text, 'hex');


const decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), Buffer.alloc(8, 0));


let decrypted = decipher.update(encryptedText);


decrypted = Buffer.concat([decrypted, decipher.final()]);


return decrypted.toString();


}

// 测试


const originalText = 'Hello, world!';


const encryptedText = encrypt(originalText);


console.log('Encrypted:', encryptedText);


const decryptedText = decrypt(encryptedText);


console.log('Decrypted:', decryptedText);


三、非对称加密

非对称加密是指加密和解密使用不同的密钥,通常包括公钥和私钥。

1. RSA

RSA 是一种常用的非对称加密算法。

javascript

// 导入Web Crypto API


const crypto = require('crypto');

// 生成RSA密钥对


const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {


modulusLength: 2048,


publicKeyEncoding: {


type: 'spki',


format: 'pem',


},


privateKeyEncoding: {


type: 'pkcs8',


format: 'pem',


},


});

// 加密函数


function encrypt(text, publicKey) {


const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(text));


return encrypted.toString('base64');


}

// 解密函数


function decrypt(text, privateKey) {


const decrypted = crypto.privateDecrypt(


{


key: privateKey,


padding: crypto.constants.RSA_PKCS1_OAEP_PADDING,


},


Buffer.from(text, 'base64')


);


return decrypted.toString();


}

// 测试


const originalText = 'Hello, world!';


const encryptedText = encrypt(originalText, publicKey);


console.log('Encrypted:', encryptedText);


const decryptedText = decrypt(encryptedText, privateKey);


console.log('Decrypted:', decryptedText);


2. ECDSA(椭圆曲线数字签名算法)

ECDSA 是一种基于椭圆曲线的非对称加密算法,常用于数字签名。

javascript

// 导入Web Crypto API


const crypto = require('crypto');

// 生成ECDSA密钥对


const { publicKey, privateKey } = crypto.generateKeyPairSync('ec', {


namedCurve: 'P-256',


publicKeyEncoding: {


type: 'spki',


format: 'pem',


},


privateKeyEncoding: {


type: 'pkcs8',


format: 'pem',


},


});

// 签名函数


function sign(text, privateKey) {


const signature = crypto.sign('sha256', text, {


key: privateKey,


padding: crypto.constants.RSA_PKCS1_PSS_PADDING,


});


return signature;


}

// 验证签名函数


function verify(text, signature, publicKey) {


const verified = crypto.verify(


'sha256',


text,


{


key: publicKey,


padding: crypto.constants.RSA_PKCS1_PSS_PADDING,


},


signature


);


return verified;


}

// 测试


const originalText = 'Hello, world!';


const signature = sign(originalText, privateKey);


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


const verified = verify(originalText, signature, publicKey);


console.log('Verification:', verified);


四、哈希算法

哈希算法可以将任意长度的数据映射为固定长度的哈希值,常用于数据完整性校验和密码存储。

1. SHA-256

SHA-256 是一种常用的哈希算法。

javascript

// 导入Web Crypto API


const crypto = require('crypto');

// 生成SHA-256哈希值


function hash(text) {


const hash = crypto.createHash('sha256');


hash.update(text);


return hash.digest('hex');


}

// 测试


const originalText = 'Hello, world!';


const hashValue = hash(originalText);


console.log('Hash:', hashValue);


2. MD5

MD5 是一种较老的哈希算法,虽然安全性较低,但仍然在一些场景下使用。

javascript

// 导入Web Crypto API


const crypto = require('crypto');

// 生成MD5哈希值


function hash(text) {


const hash = crypto.createHash('md5');


hash.update(text);


return hash.digest('hex');


}

// 测试


const originalText = 'Hello, world!';


const hashValue = hash(originalText);


console.log('Hash:', hashValue);


五、总结

JavaScript 数据加密解密技术在保障数据安全方面具有重要意义。本文介绍了对称加密、非对称加密和哈希算法在 JavaScript 中的实现方法,包括 AES、DES、RSA、ECDSA、SHA-256 和 MD5。在实际应用中,开发者应根据具体需求选择合适的加密算法,并确保密钥的安全管理。

注意:本文中的代码示例仅供参考,实际应用中请根据具体需求进行调整。由于 JavaScript 的运行环境限制,部分代码可能需要在 Node.js 环境中运行。