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分之一的机率出现相同的消息摘要,一般使用时忽略)。
NodeJs之crypto的更多相关文章
- nodeJS之crypto模块md5和Hmac加密
nodeJS之crypto模块md5和Hmac加密 原文地址:https://www.cnblogs.com/tugenhua0707/p/9128690.html 在nodejs中,可以使用cryp ...
- nodeJS之crypto模块公钥加密及解密
nodeJS之crypto模块公钥加密及解密 NodeJS有以下4个与公钥加密相关的类.1. Cipher: 用于加密数据:2. Decipher: 用于解密数据:3. Sign: 用于生成签名:4. ...
- nodeJS之crypto加密
前面的话 加密模块提供了 HTTP 或 HTTPS 连接过程中封装安全凭证的方法.也提供了 OpenSSL 的哈希,hmac, 加密(cipher), 解密(decipher), 签名(sign) 和 ...
- nodejs加密Crypto简单例子
加密技术通常分为两大类:“对称式”和“非对称式”. 对称式加密: 就是加密和解密使用同一个密钥,通常称之为“Session Key ”这种加密技术在当今被广泛采用,如美国政府所采用的DES加密标准就是 ...
- 使用nodeJS的 crypto模块来为你的密码hash加盐
这篇文章将向你解释如何使用Node.js的Crypto模块对你的密码进行加盐hash.在这里,我们将不会对不懂的密码存储方式进行详细的比较.我们将要做的是知道在Node.js中使用加盐hash在进行密 ...
- nodejs之crypto加密算法
示例 const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update('some dat ...
- nodejs 使用crypto实现sha256\md5加密
var crypto = require('crypto'); var hash = crypto.createHash('sha256');// sha256或者md5 hash.update('1 ...
- Nodejs实战系列:数据加密与crypto模块
博客地址:<NodeJS模块研究 - crypto> Github :https://github.com/dongyuanxin/blog nodejs 中的 crypto 模块提供了各 ...
- Nodejs AES加密
这几天被一个问题困扰着. Nodejs的AES加密和Java,C#加密出来的不一致.当然,这样就不能解密了. 纠结了许久:后来还是实在不行了,看了下源代码,要不然还得继续纠结下去. 网上说,通常的no ...
随机推荐
- 用简单的http抓包来实现微信公众网页如何模拟登录
一.准备工具: 系统:XP 浏览器:IE8 抓包工具:HttpWatch(它可以查看url请求的数据包) 二.抓包思路: 浏览器上的任何获取数据的方式都符合http协议的请求,只要发送符合要求的数据就 ...
- 【腾讯优测干货分享】微信小程序之自动化亲密接触
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/HcPakz5CV1SHnu-U8n85pw 导语 山雨欲来风满楼,最 ...
- UVa 10400 - Game Show Math
题目大意:给出n(n<100)个正整数和一个目标数,按照给出数的顺序,运用+.-.*./四则运算(不考虑优先级),判断能否得出所要的结果. 首先考虑的就是暴力枚举,不过时间复杂度为O(4n),会 ...
- AForge.NET是一个专门为开发者和研究者基于C#框架设计的视频录像
AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域.这个框架由一系列的类库组成.主要包括有 ...
- Samba匿名用戶仅仅唯读访问
NAS(Network Attached Storage),网络附加存储需要支持NFS(Network File System)和CIFS(Common Internet File Sysem)一 ...
- iOS 设置UILable字体,及计算长度和位置
UILabel *lastLable = [[UILabel alloc] init]; UIFont *font = [UIFont fontWithName:lastLable.font.font ...
- 纯css三角形
三角形原理: 盒子c内容width为0,height为0,盒子给一定宽度的border,分别为四边的border设置不同的颜色,则可以得到不同样式的三角形举个简单的栗子:CSS代码 .box1{ wi ...
- eQTL
首先QTL是数量性状位点,比如身高是一个数量性状,其对应的控制基因的位点就是一个数量性状位点,而eQTL就是控制数量性状表达位点,即能控制数量性状基因(如身高基因)表达水平高低的那些基因的位点. 数量 ...
- 第一部分 记事本搞定第一个C#程序和编译过程剖析
记事本搞定第一个C#程序 进行下面三个步骤:编码,编译和托管运行. 1.记事本进行编码: using System; class Program{ public static void Main() ...
- python关于列表的操作
列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型.列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类 ...