📜  javascript中的加密解密(1)

📅  最后修改于: 2023-12-03 14:42:40.410000             🧑  作者: Mango

JavaScript中的加密和解密

在现代应用程序和网站中,安全性是一个非常重要的问题。其中一个关键部分就是加密和解密。JavaScript中有多种加密和解密技术可供使用。本文将介绍其中一些常用的技术。

加密
Base64编码

Base64是将二进制数据编码为ASCII字符的一种方式。在JavaScript中,Base64编码可以使用btoa()函数实现。以下是一个将字符串编码为Base64的代码示例。

let str = 'Hello World!';
let encoded = btoa(str);
console.log(encoded);

输出:

SGVsbG8gV29ybGQh

要解码Base64编码的数据,则可以使用atob()函数。

let encoded = 'SGVsbG8gV29ybGQh';
let decoded = atob(encoded);
console.log(decoded);

输出:

Hello World!
加密算法

JavaScript中也有一些加密算法可供使用。

MD5哈希

MD5是一种常用的哈希函数,可以将任意长度的数据映射成一个128位的哈希值。在JavaScript中可以使用crypto模块的createHash()方法实现MD5哈希。以下是一个示例代码。

const crypto = require('crypto');

let str = 'Hello World!';
let hash = crypto.createHash('md5').update(str).digest('hex');
console.log(hash);

输出:

b10a8db164e0754105b7a99be72e3fe5

AES加密

AES是一种快速高效的对称加密算法,广泛应用于数据加密和解密。在JavaScript中,可以使用crypto模块的createCipheriv()方法实现AES加密。

以下是一个使用AES加密算法加密数据的代码示例。

const crypto = require('crypto');

let plaintext = 'Hello World!';
let key = crypto.randomBytes(16); // 16字节的随机密钥
let iv = crypto.randomBytes(16); // 16字节的随机初始向量
let cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
let encrypted = cipher.update(plaintext, 'utf8', 'hex') + cipher.final('hex');
console.log('密文:', encrypted);

输出:

密文: c5ed5dbf79209d255c32f041d18d5c5c

要解密数据,则可以使用createDecipheriv()方法。

let decrypted = '';
let decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
decrypted = decipher.update(encrypted, 'hex', 'utf8') + decipher.final('utf8');
console.log('明文:', decrypted);

输出:

明文: Hello World!
解密

在JavaScript中,同样可以使用加密算法的解密逆运算进行解密操作。

Base64解码

在使用btoa()函数将字符串编码为Base64时,需要使用atob()函数进行解码。

let encoded = 'SGVsbG8gV29ybGQh';
let decoded = atob(encoded);
console.log(decoded);

输出:

Hello World!
MD5解密

MD5哈希函数是单向函数,不能直接解密。但是,可以使用各种方法对哈希值进行撞库破解,得到原始数据。因此,在实际应用中,应该使用更安全的哈希函数。

AES解密

使用AES加密算法加密的数据,同样可以使用AES解密算法解密。createDecipheriv()方法可以用于解密。

let decrypted = '';
let decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
decrypted = decipher.update(encrypted, 'hex', 'utf8') + decipher.final('utf8');
console.log('明文:', decrypted);

输出:

明文: Hello World!