crypto

2017-09-26  本文已影响0人  魏秋娟

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/

代码均来自廖雪峰教程。

上一篇下一篇

猜你喜欢

热点阅读