📜  在 nodejs 中加密和解密 - Javascript (1)

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

在 Node.js 中加密和解密

Node.js 中提供了许多加密和解密的功能,这些功能可以保证数据的安全性,防止数据被恶意篡改或窃取。以下是 Node.js 中常用的加密和解密方式:

Hash

哈希是将数据转换为固定长度的值的一种方式。Hash 函数是一种单向的加密方式,即无法根据哈希值计算出原始数据,主要用于验证数据的完整性和唯一性。Node.js 中的 crypto 模块提供了哈希函数。

const crypto = require("crypto");

// 创建哈希实例
const hash = crypto.createHash("sha256");

// 更新数据
hash.update("hello world");

// 获取摘要值
const digest = hash.digest("hex");

console.log(digest); // 3a08d5fcaf913b7e57ee37d6b8f8415b2ddbdca5a278a2f0fdc1c07df97503fb

在上面的例子中,我们使用 createHash() 方法创建了一个哈希实例,并使用 update() 方法更新了要哈希的数据。最后使用 digest() 方法获取摘要值。在 digest() 方法中,我们可以指定输出格式,例如 hex 表示以 16 进制方式输出,base64 表示以 Base64 格式输出。

Hmac

Hmac 是在哈希算法基础上加入了密钥的一种方式,可以增强哈希算法的安全性。和 Hash 类似,Node.js 也提供了 Hmac 函数。

const crypto = require("crypto");

// 创建 Hmac 实例
const hmac = crypto.createHmac("sha256", "secret");

// 更新数据
hmac.update("hello world");

// 获取摘要值
const digest = hmac.digest("hex");

console.log(digest); // 2b60a081165c3ac9bbdbcaeb176e87166058f773b6f91452d263f04804a1de6f

在上面的例子中,我们使用 createHmac() 方法创建了一个 Hmac 实例,并指定了密钥。接下来使用 update() 方法更新要哈希的数据,并使用 digest() 方法获取摘要值。

Cipher

Cipher 是一种加密算法,可以将明文转换成密文。Node.js 中的 crypto 模块提供了 Cipher 函数。常用的加密算法有 AES、DES、RC4 等。

const crypto = require("crypto");

const key = "secret key"; // 密钥
const plaintext = "hello world"; // 明文

// 创建 Cipher 实例
const cipher = crypto.createCipher("aes-256-cbc", key);

// 更新数据
let encrypted = cipher.update(plaintext, "utf8", "hex");
encrypted += cipher.final("hex");

console.log(encrypted); // ef1490d6b8df6d09a6c7e6ea59cf6ae8

在上面的例子中,我们使用 createCipher() 方法创建了一个 Cipher 实例,并指定了加密算法和密钥。使用 update() 方法更新要加密的数据,并指定数据的编码格式。最后使用 final() 方法获取加密后的密文,同样可以指定输出格式。

Decipher

Decipher 是解密算法,可以将密文转换成明文。Node.js 中的 crypto 模块提供了 Decipher 函数。

const crypto = require("crypto");

const key = "secret key"; // 密钥
const encrypted = "ef1490d6b8df6d09a6c7e6ea59cf6ae8"; // 密文

// 创建 Decipher 实例
const decipher = crypto.createDecipher("aes-256-cbc", key);

// 更新数据
let decrypted = decipher.update(encrypted, "hex", "utf8");
decrypted += decipher.final("utf8");

console.log(decrypted); // hello world

在上面的例子中,我们使用 createDecipher() 方法创建了一个 Decipher 实例,并指定了解密算法和密钥。使用 update() 方法更新要解密的数据,并指定数据的编码格式。最后使用 final() 方法获取解密后的明文,同样可以指定输出格式。

以上是 Node.js 中常用的加密和解密方式。在实际开发中,我们需要根据实际情况选择合适的加密方式,确保数据的安全。