crypto
crypto
是node.js
中实现加密和解密的模块
在node.js
中,使用OpenSSL
类库作为内部实现加密解密的手段OpenSSL
是一个经过严格测试的可靠的加密与解密算法的实现工具
散列(哈希)算法
把任意长度的输入变换成固定长度的输出
var crypto = require('crypto');
var md5 = crypto.createHash('md5');
var md5Sum = md5.update('hello');
var result = md5Sum.digest('hex');
console.log(result);
HMAC算法
HMAC算法将散列算法与一个密钥结合在一起,以阻止对签名完整性的破坏 生成私钥
$ openssl genrsa -out key.pem 1024
var crypto = require('crypto');
var shasum = crypto.createHmac('sha1', 'zfpx');
var result = shasum.update('hello').digest('hex');
console.log(result);
加密解密
Blowfish
算法是一种对称的分组加密算法
var crypto = require('crypto');
var fs = require('fs');
function cipher() {
var cipher = crypto.createCipher('blowfish', fs.readFileSync('key.pem', 'ascii'));
cipher.update('123456', 'utf8', 'hex');
return cipher.final('hex');
}
var result = cipher();
console.log(result);
var decipher = crypto.createDecipher('blowfish', fs.readFileSync('key.pem', 'ascii'));
decipher.update(result, 'hex', 'utf8');
var result = decipher.final('utf8');
console.log(result);
##非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密
因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
为私钥创建公钥
$ openssl req -key key.pem -new -x509 -out cert.pem
var crypto = require('crypto');
var fs = require('fs');
var buffer = new Buffer('hello');
var secret = crypto.publicEncrypt(fs.readFileSync('cert.pem').toString(), buffer);
var result = crypto.privateDecrypt(fs.readFileSync('key.pem').toString(), secret);
console.log(result.toString());
签名
在网络中,私钥的拥有者可以在一段数据被发送之前先对数据进行签名
在签名的过程中将对这段数据执行加密处理。
在经过加密后的数据发送之后,数据的接收者可以通过公钥的使用来对该签名进行解密及验证操作,以确保这段数据是私钥的拥有者所发出的原始数据,且在网络中的传输过程中未被修改。
var crypto = require('crypto');
var fs = require('fs');
function sign() {
var sign = crypto.createSign('RSA-SHA256');
sign.update('test');
return sign.sign(fs.readFileSync('key.pem').toString('ascii'), 'hex');
}
var result = sign();
console.log(result);
function verify() {
var public = fs.readFileSync('cert.pem').toString();
var verify = crypto.createVerify('RSA-SHA256');
verify.update('test');
console.log(verify.verify(public, result, 'hex'));
}
verify();