zoukankan      html  css  js  c++  java
  • NodeJs之crypto

    NodeJs版本:4.4.4

    crypto


    nodejs提供了内置加密模块crypto

    加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法。

    它也提供了 OpenSSL 的哈希,hmac, 加密(cipher), 解密(decipher), 签名(sign) 和 验证(verify) 方法的封装。

    获取支持的加密算法


    var crypto = require('crypto');
    console.log(crypto.getHashes());
    
    

    输出:

    $  node cryptoTest.js
    [ 'DSA',
      'DSA-SHA',
      'DSA-SHA1',
      'DSA-SHA1-old',
      'RSA-MD4',
      'RSA-MD5',
      'RSA-MDC2',
      'RSA-RIPEMD160',
      'RSA-SHA',
      'RSA-SHA1',
      'RSA-SHA1-2',
      'RSA-SHA224',
      'RSA-SHA256',
      'RSA-SHA384',
      'RSA-SHA512',
      'dsaEncryption',
      'dsaWithSHA',
      'dsaWithSHA1',
      'dss1',
      'ecdsa-with-SHA1',
      'md4',
      'md4WithRSAEncryption',
      'md5',
      'md5WithRSAEncryption',
      'mdc2',
      'mdc2WithRSA',
      'ripemd',
      'ripemd160',
      'ripemd160WithRSA',
      'rmd160',
      'sha',
      'sha1',
      'sha1WithRSAEncryption',
      'sha224',
      'sha224WithRSAEncryption',
      'sha256',
      'sha256WithRSAEncryption',
      'sha384',
      'sha384WithRSAEncryption',
      'sha512',
      'sha512WithRSAEncryption',
      'shaWithRSAEncryption',
      'ssl2-md5',
      'ssl3-md5',
      'ssl3-sha1',
      'whirlpool' ]
    

    哈希加密测试


    现在我们测试所有该node版本支持的hash加密算法,加密同一个文件所需要的时间,以及生成的加密值。

    //测试hash加密算法
    var crypto = require('crypto');
    var fs = require('fs');
    
    var mHashName = crypto.getHashes(),
        time1, time2;
    
    function testHash(hashname) {
        time1 = new Date();
    
        //需要每次声明一个新的对象,不然会报错
        var hashInstas = crypto.createHash(hashname);
    
        fs.readFile('../lianxi/child_process.js', {
            encoding: null,
            flag: 'r'
        }, function(err, data) {
            if (err) console.log('失败');;
            hashInstas.update(data);
            time2 = new Date();
            console.log('加密方式: ' + hashname, '加密时间: ' + (time2 - time1) + 'ms', '加密值: ' + hashInstas.digest('hex'));
        });
    }
    
    function hashThings() {
        mHashName.forEach(function(hashname) {
            testHash(hashname);
        })
    }
    
    hashThings();
    

    结果:这里的有时间有点问题

     $  node cryptoTest.js
    加密方式: DSA 加密时间: 4ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: DSA-SHA1 加密时间: 26ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: RSA-MD4 加密时间: 27ms 加密值: b41d83ab1b04ea2d60c8bd5a504a2d39
    加密方式: DSA-SHA1-old 加密时间: 27ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: DSA-SHA 加密时间: 27ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: RSA-MD5 加密时间: 27ms 加密值: b8cad7d3db42d3fa5ab516b8c3390183
    加密方式: RSA-MDC2 加密时间: 28ms 加密值: 59d1ee45ed45a54eddda96172dc03512
    加密方式: RSA-RIPEMD160 加密时间: 28ms 加密值: 0c8d3f7f2cc0f187148ef8b982cafe8e9434d4c9
    加密方式: RSA-SHA1 加密时间: 28ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: RSA-SHA 加密时间: 29ms 加密值: 6a723c20e20c9284ded4c981ee0deae25f4f72ec
    加密方式: RSA-SHA224 加密时间: 29ms 加密值: d7c56e2424f18b8f5abeae930c5db851a7e5927d9aa5d2af3aadbde8
    加密方式: RSA-SHA1-2 加密时间: 29ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: RSA-SHA256 加密时间: 29ms 加密值: d77760a656fffda8e1448da5cd9851cc6b590ec2317056bd8fa3416bf5235025
    加密方式: RSA-SHA384 加密时间: 30ms 加密值: 98080003f1fbd45b65211ce00f7cf577e619d2403bdd6baa38d4e073479552d68e91a969f67818f1d497ae4d4db9f295
    加密方式: dsaEncryption 加密时间: 30ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: RSA-SHA512 加密时间: 31ms 加密值: b05715fc9d755b48e8cb10fdadd233e162d804078b9c4354895946d91deb29b2f21dfbdc85ee1333f3ef70e165bb297cc93
    fe9d27c1da746a211e1b4c53ff399
    加密方式: dsaWithSHA 加密时间: 31ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: dss1 加密时间: 31ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: dsaWithSHA1 加密时间: 31ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: ecdsa-with-SHA1 加密时间: 31ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: md4 加密时间: 32ms 加密值: b41d83ab1b04ea2d60c8bd5a504a2d39
    加密方式: md4WithRSAEncryption 加密时间: 32ms 加密值: b41d83ab1b04ea2d60c8bd5a504a2d39
    加密方式: md5 加密时间: 32ms 加密值: b8cad7d3db42d3fa5ab516b8c3390183
    加密方式: md5WithRSAEncryption 加密时间: 32ms 加密值: b8cad7d3db42d3fa5ab516b8c3390183
    加密方式: mdc2WithRSA 加密时间: 33ms 加密值: 59d1ee45ed45a54eddda96172dc03512
    加密方式: mdc2 加密时间: 33ms 加密值: 59d1ee45ed45a54eddda96172dc03512
    加密方式: ripemd 加密时间: 33ms 加密值: 0c8d3f7f2cc0f187148ef8b982cafe8e9434d4c9
    加密方式: ripemd160 加密时间: 33ms 加密值: 0c8d3f7f2cc0f187148ef8b982cafe8e9434d4c9
    加密方式: ripemd160WithRSA 加密时间: 33ms 加密值: 0c8d3f7f2cc0f187148ef8b982cafe8e9434d4c9
    加密方式: rmd160 加密时间: 34ms 加密值: 0c8d3f7f2cc0f187148ef8b982cafe8e9434d4c9
    加密方式: sha 加密时间: 34ms 加密值: 6a723c20e20c9284ded4c981ee0deae25f4f72ec
    加密方式: sha1 加密时间: 34ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: sha1WithRSAEncryption 加密时间: 34ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: sha224 加密时间: 34ms 加密值: d7c56e2424f18b8f5abeae930c5db851a7e5927d9aa5d2af3aadbde8
    加密方式: sha224WithRSAEncryption 加密时间: 35ms 加密值: d7c56e2424f18b8f5abeae930c5db851a7e5927d9aa5d2af3aadbde8
    加密方式: sha256WithRSAEncryption 加密时间: 35ms 加密值: d77760a656fffda8e1448da5cd9851cc6b590ec2317056bd8fa3416bf5235025
    加密方式: sha384 加密时间: 35ms 加密值: 98080003f1fbd45b65211ce00f7cf577e619d2403bdd6baa38d4e073479552d68e91a969f67818f1d497ae4d4db9f295
    加密方式: sha256 加密时间: 35ms 加密值: d77760a656fffda8e1448da5cd9851cc6b590ec2317056bd8fa3416bf5235025
    加密方式: sha384WithRSAEncryption 加密时间: 35ms 加密值: 98080003f1fbd45b65211ce00f7cf577e619d2403bdd6baa38d4e073479552d68e91a969f67818f1d497ae
    4d4db9f295
    加密方式: sha512 加密时间: 36ms 加密值: b05715fc9d755b48e8cb10fdadd233e162d804078b9c4354895946d91deb29b2f21dfbdc85ee1333f3ef70e165bb297cc93fe9d
    27c1da746a211e1b4c53ff399
    加密方式: sha512WithRSAEncryption 加密时间: 36ms 加密值: b05715fc9d755b48e8cb10fdadd233e162d804078b9c4354895946d91deb29b2f21dfbdc85ee1333f3ef70
    e165bb297cc93fe9d27c1da746a211e1b4c53ff399
    加密方式: shaWithRSAEncryption 加密时间: 36ms 加密值: 6a723c20e20c9284ded4c981ee0deae25f4f72ec
    加密方式: ssl2-md5 加密时间: 36ms 加密值: b8cad7d3db42d3fa5ab516b8c3390183
    加密方式: ssl3-md5 加密时间: 37ms 加密值: b8cad7d3db42d3fa5ab516b8c3390183
    加密方式: ssl3-sha1 加密时间: 37ms 加密值: 17e047eaabe1052d81bf89570e6cec8dde07e236
    加密方式: whirlpool 加密时间: 37ms 加密值: 511f3ad64526be218755db49de3dcf76856492933cf6e687fbf16c8ef221a35765e6bfc10d0caabe10fd8be81333870f7b2a
    07de6e438b0138696e75dfb0e88c
    
    

    MD5(Message-Digest Algorithm 5)加密


    MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆。

    MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。

    加密字符串

    //加密字符串
    var crypto = require('crypto');
    var md5 = crypto.createHash('md5');
    md5.update('leslie·Zhao');
    var d = md5.digest('hex');
    console.log(d);
    

    结果:

    5fe2e17a390ec2f31204acb01dce3439
    

    加密数字

    //加密数字
    var crypto = require('crypto');
    var md5 = crypto.createHash('md5');
    md5.update('01010122');
    var d = md5.digest('hex');
    console.log(d);
    

    结果:

    c593dff86633e44591406f111d4e1318
    

    加密文件

    var crypto = require('crypto');
    var fs = require('fs');
    
    fs.readFile('../lianxi/child_process.js', {
        encoding: null,
        flag: 'r'
    }, function(err, data) {
        if (err) console.log('失败');;
        var md5 = crypto.createHash('md5');
        md5.update(data);
        var d = md5.digest('hex');
        console.log(d);
    });
    

    结果:

    b8cad7d3db42d3fa5ab516b8c3390183
    

    SHA1(Secure Hash Algorithm)加密


    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准 (Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。

    对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。

    在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。

    SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要,(但会有1x10 ^ 48分之一的机率出现相同的消息摘要,一般使用时忽略)。

  • 相关阅读:
    eclipse注释模板__自动生成方法注释
    java HashMap--统计其中有相同value的key的个数
    java synchronized 详解
    进程间通信-共享内存
    辅导-计算机编程方面
    gnu make
    适应c++ 新特性
    tomcat服务器
    springmvc笔记
    Idea使用SVN教程
  • 原文地址:https://www.cnblogs.com/zqzjs/p/6279518.html
Copyright © 2011-2022 走看看