珠峰nodejs培训之nodejs中的加密与解密

作者:日期:2016-08-29 16:34:41 点击:276

crypto

cryptonode.js中实现加密和解密的模块 在node.js中,使用OpenSSL类库作为内部实现加密解密的手段
OpenSSL是一个经过严格测试的可靠的加密与解密算法的实现工具

windows版下载 代码

散列(哈希)算法

把任意长度的输入变换成固定长度的输出

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();

上一篇: nodejs培训课程之压缩与解压缩

下一篇: 珠峰nodejs培训之react经典入门