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分之一的機率出現相同的消息摘要,一般使用時忽略)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM