crypto

作者: 魏秋娟 | 来源:发表于2017-09-26 19:57 被阅读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/

    代码均来自廖雪峰教程。

    相关文章

      网友评论

          本文标题:crypto

          本文链接:https://www.haomeiwen.com/subject/kudeextx.html