Node.js crypto 模块
Node.js 教程
收录了这篇文章

当然,下面是一个简单的 Node.js crypto 模块入门教程,涵盖了一些基础操作,包括创建哈希、使用 HMAC、以及简单地加密和解密数据。

准备工作

确保你已经安装了 Node.js。可以通过在命令行输入 node -v 来检查你的 Node.js 版本。

创建哈希

哈希是一种不可逆的过程,常用于数据完整性校验。这里我们使用 SHA-256 哈希算法。

// 引入 crypto 模块
const crypto = require('crypto');

// 创建一个 SHA-256 哈希对象
const hash = crypto.createHash('sha256');

// 更新要哈希的数据
hash.update('Hello, Node.js Crypto!');

// 生成并输出哈希摘要
console.log(hash.digest('hex'));

 

使用 HMAC

HMAC 可以提供额外的数据验证安全性,因为它结合了密钥和消息数据。

const key = 'my-secret-key';
const hmac = crypto.createHmac('sha256', key);
hmac.update('The message');
console.log(hmac.digest('hex'));

 

对称加密与解密(AES 示例)

// 生成一个随机的初始化向量(IV)
const iv = crypto.randomBytes(16);

// 创建一个 AES 加密器,使用 CBC 模式
const cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from('my-secret-key-32-bytes-long'), iv);

let encrypted = '';
cipher.on('data', (chunk) => {
  encrypted += chunk.toString('hex');
});
cipher.on('end', () => {
  console.log('Encrypted:', encrypted);
});

cipher.write('Sensitive data to encrypt');
cipher.end();

// 解密
const decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from('my-secret-key-32-bytes-long'), Buffer.from(iv, 'hex'));

let decrypted = '';
decipher.on('data', (chunk) => {
  decrypted += chunk.toString();
});
decipher.on('end', () => {
  console.log('Decrypted:', decrypted);
});

decipher.write(Buffer.from(encrypted, 'hex'));
decipher.end();

 

注意事项

  • 确保密钥的安全性,特别是对称加密的密钥。
  • 对于实际应用中的密码存储,建议使用专门为密码设计的算法,如 bcrypt,而非简单的哈希。
  • 在处理敏感数据时,遵循最佳安全实践,比如使用安全的随机数生成器来创建 IV 和密钥。

以上示例提供了 crypto 模块的基本使用方法。根据具体需求,crypto 还提供了更多高级功能,如公钥/私钥对的生成和使用、数字签名等。

声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
WordPress 自定义 JWT 授权和验证
JavaScript 和 CSS 检测横屏适配
Nginx 通过日志统计访问数据
uni-app 实现暗黑模式/夜间模式/深色模式/暗黑主题(DarkMode)的几种方法
JavaScript 字符串详细介绍
MySQL 的 sql_mode 模式介绍:为什么 MySQL 中 int,float,double 类型字段插入空字符时自动转为0
JavaScript 引用类型
macOS 生成 icns 图标