crypto模塊目的是為了提供通用的加密和希哈算法。純js實現(xiàn)這些功能太困難久妆,速度非常慢晌杰。nodejs用C實現(xiàn)這些算法之后跷睦,通過cypto這個模塊暴露為JS接口筷弦,方便,有效抑诸。
1.
MD5和SHA1:采用十六進制的字符串表示烂琴。
update()方法默認(rèn)字符串編碼為UTF-8.
要計算SHA1,只需要把‘md5’改成‘sha1’
const crypto =require('crypto');
const hash = crypto.createHash('md5');
// 可任意多次調(diào)用update():
hash.update('Hello, world!');
hash.update('Hello, nodejs!');
console.log(hash.digest('hex'));
2.
Hmac算法蜕乡,可以利用上面的算法奸绷,但是它還需要一個密鑰,只要密鑰發(fā)生變化层玲,同樣的數(shù)據(jù)會得到不同的簽名号醉。
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);
如果運行出來辛块,我們就會發(fā)現(xiàn)畔派,將加密的消息又返回了。
4.
Diffie-Hellman算法是一種密鑰交換協(xié)議润绵,可以讓對方不泄漏密鑰的情況下商量出一個密鑰线椰。
參考鏈接:https://www.liaoxuefeng.com/
代碼均來自廖雪峰教程。