crypto
模块提供了加密功能,包括对 OpenSSL 的哈希、HMAC、加密、解密、签名、以及验证功能的一整套封装。
const crypto = require('crypto');
const secret = 'abcdefg';
const hash = crypto.createHmac('sha256',secret).update('I Love cupcakes').digest('hex');
console.log(hash);
一个工作八年的草根程序员。
相关的几个方法
createHash
:用于创建Hash
实例。不能使用new
关键字直接地创建Hash
对象。可以接受以下几种加密方式md5
sha1
sha256
sha512
ripemd160
digest
:计算摘要,只能调用一次。update
:用给定的data
更新哈希内容,其编码在inputEncoding
中给出。可以调用多次。
var crypto = require("crypto");
var fs = require('fs');
var path = require("path");
var content = fs.readFileSync('nodejs/Exercise/file.txt', {
encoding: 'utf8'
});
var hash = crypto.createHash("sha256");
var output;
hash.update(content);
output = hash.digest("hex");
console.log(output);
HMAC 的全称是 Hash-based Message Authentication Code,也即在 hash 的加盐运算。
const crypto = require('crypto');
const fs = require('fs');
const hmac = crypto.createHmac('sha256', '密钥');
const input = fs.readFileSync('nodejs/Exercise/file.txt', {
encoding: 'utf8'
});
hmac.update(input);
console.log(hmac.digest('hex'));
公钥加密功能分布在如下 4 个类中:
Cipher
类的实例用于加密数据
crypto.createCipher(algorithm, password)
接受两个参数,两参数分别是加密算法、密码
- algorithm:加密算法
- password:用来生成密钥、初始化向量。
// 公钥加密
var crypto = require("crypto");
var secret = 'secret';
var cipher = crypto.createCipher('aes192', secret);
var content = 'hello';
var cryptedContent;
cipher.update(content);
cryptedContent = cipher.final('hex');
console.log(cryptedContent);
Decipher
类的实例用于解密数据。
// 公钥解密
var crypto = require("crypto");
var secret = 'secret';
var cipher = crypto.createCipher('aes192', secret);
var content = 'hello';
var cryptedContent;
cipher.update(content);
cryptedContent = cipher.final('hex');
console.log(cryptedContent);
var decipher = crypto.createDecipher("aes192", secret);
var decryptedContent;
decipher.update(cryptedContent, 'hex');
decryptedContent = decipher.final('utf8');
console.log(decryptedContent);
Sign
类是一个实用工具,用于生成签名。
const crypto = require('crypto');
const {
privateKey,
publicKey
} = crypto.generateKeyPairSync('ec', {
namedCurve: 'sect239k1'
});
const algorithm = 'RSA-SHA256'; // 加密算法VS 摘要算法
function sign(text) {
var sign = crypto.createSign(algorithm);
sign.update(text);
return sign.sign(privateKey, 'hex');
}
// 对内容进行签名
var content = 'hello world';
var signature = sign(content);
console.log(signature);
Verify
类是一个实用工具,用于验证签名。
const crypto = require('crypto');
const {
privateKey,
publicKey
} = crypto.generateKeyPairSync('ec', {
namedCurve: 'sect239k1'
});
const algorithm = 'RSA-SHA256'; // 加密算法VS 摘要算法
function sign(text) {
var sign = crypto.createSign(algorithm);
sign.update(text);
return sign.sign(privateKey, 'hex');
}
// 对内容进行签名
var content = 'hello world';
var signature = sign(content);
console.log(signature);
// 校验签名,如果通过,返回true
var verified = verify(content, signature);
console.log(verified);
- 《Nodejs 即学即用》
- crypto
- Node.js 中文网