crypto模块目的是为了提供通用的加密和希哈算法。纯js实现这些功能太困难,速度非常慢。nodejs用C实现这些算法之后,通过cypto这个模块暴露为JS接口,方便,有效。
1.
MD5和SHA1:采用十六进制的字符串表示。
update()方法默认字符串编码为UTF-8.
要计算SHA1,只需要把‘md5’改成‘sha1’
const crypto =require('crypto');
const hash = crypto.createHash('md5');
// 可任意多次调用update():
hash.update('Hello, world!');
hash.update('Hello, nodejs!');
console.log(hash.digest('hex'));
2.
Hmac算法,可以利用上面的算法,但是它还需要一个密钥,只要密钥发生变化,同样的数据会得到不同的签名。
constcrypto =require('crypto');
consthmac = crypto.createHmac('sha256','secret-key');
hmac.update('Hello, world!');
hmac.update('Hello, nodejs!');
console.log(hmac.digest('hex'));
3.
ASE对称加密算法,加解密都用同一个密钥。
const crypto =require('crypto');
function aesEncrypt(data, key){
constcipher = crypto.createCipher('aes192', key);
var crypted = cipher.update(data,'utf8','hex');
crypted += cipher.final('hex');
return crypted;
}
functionaesDecrypt(encrypted, key){
const decipher = crypto.createDecipher('aes192', key);
var decrypted = decipher.update(encrypted,'hex','utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
var data ='Hello, this is a secret message!';
var key ='Password!';
var encrypted = aesEncrypt(data, key);
var decrypted = aesDecrypt(encrypted, key);
console.log('Plain text: '+ data);
console.log('Encrypted text: '+ encrypted);
console.log('Decrypted text: '+ decrypted);
如果运行出来,我们就会发现,将加密的消息又返回了。
4.
Diffie-Hellman算法是一种密钥交换协议,可以让对方不泄漏密钥的情况下商量出一个密钥。
参考链接:https://www.liaoxuefeng.com/
代码均来自廖雪峰教程。