nodejs中常用加密算法

 

1、Hash算法加密:

创建一个nodejs文件hash.js,输入内容如下:

1 var crypto = require('crypto');  //加载crypto库
2 console.log(crypto.getHashes()); //打印支持的hash算法

  结果如下:

 1 [ 'DSA',
2 'DSA-SHA',
3 'DSA-SHA1',
4 'DSA-SHA1-old',
5 'RSA-MD4',
6 'RSA-MD5',
7 'RSA-MDC2',
8 'RSA-RIPEMD160',
9 'RSA-SHA',
10 'RSA-SHA1',
11 'RSA-SHA1-2',
12 'RSA-SHA224',
13 'RSA-SHA256',
14 'RSA-SHA384',
15 'RSA-SHA512',
16 'dsaEncryption',
17 'dsaWithSHA',
18 'dsaWithSHA1',
19 'dss1',
20 'ecdsa-with-SHA1',
21 'md4',
22 'md4WithRSAEncryption',
23 'md5',
24 'md5WithRSAEncryption',
25 'mdc2',
26 'mdc2WithRSA',
27 'ripemd',
28 'ripemd160',
29 'ripemd160WithRSA',
30 'rmd160',
31 'sha',
32 'sha1',
33 'sha1WithRSAEncryption',
34 'sha224',
35 'sha224WithRSAEncryption',
36 'sha256',
37 'sha256WithRSAEncryption',
38 'sha384',
39 'sha384WithRSAEncryption',
40 'sha512',
41 'sha512WithRSAEncryption',
42 'shaWithRSAEncryption',
43 'ssl2-md5',
44 'ssl3-md5',
45 'ssl3-sha1',
46 'whirlpool' ]

在nodejs中使用:(createHash('md5')中的‘md5’可以换成袭击需要的hash加密方法)

1     var content = 'password';//加密的明文;
2 var md5 = crypto.createHash('md5');//定义加密方式:md5不可逆,此处的md5可以换成任意hash加密的方法名称;
3 md5.update(content);
4 var d = md5.digest('hex'); //加密后的值d
5 console.log("加密的结果:"+d);
 
 
 
2、Hmac算法加密:(主要用)

HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC可以有效防止一些类似md5的彩虹表等攻击,比如一些常见的密码直接MD5存入数据库的,可能被反向破解。

定义HMAC需要一个加密用散列函数(表示为H,可以是MD5或者SHA-1)和一个密钥K。我们用B来表示数据块的字节数。(以上所提到的散列函数的分割数据块字长B=64),用L来表示散列函数的输出数据字节数(MD5中L=16,SHA-1中L=20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。一般情况下,推荐的最小密钥K长度是L个字节。

下面为我在项目中使用到的Hmac加密(采用sha1方式):(由于密钥会通过随机生成的16位数进行加密后再对明文加密,每次生成的新密钥(token)都不同,所以最后生成的密文也不会相同,这种加密不可逆,

即使为md5方式,也难以通过彩虹表来攻击)

/********hmac-sha1加密***************/
var content = 'password';//加密的明文;
var token1='miyue';//加密的密钥;
var buf = crypto.randomBytes(16);
token1 = buf.toString('hex');//密钥加密;
console.log("生成的token(用于加密的密钥):"+token1);
var SecrectKey=token1;//秘钥;
var Signture = crypto.createHmac('sha1', SecrectKey);//定义加密方式
Signture.update(content);
var miwen=Signture.digest().toString('base64');//生成的密文后将再次作为明文再通过pbkdf2算法迭代加密;
console.log("加密的结果f:"+miwen); /**********对应的结果(每次生成的结果都不一样)******************/
生成的token(用于加密的密钥):de7c3dafede518a1ad9c2096ee9b4eff
加密的结果f:PUX7fnOMlqVj+BS9o6RnNgxfffY=

生成的token(用于加密的密钥):93fee046ebf47412c2d54c1e808218d2
  加密的结果f:/ERkUcrjkwxzgxNM7WczU8RaX5o=

3、对称加密和非对称加密:

  • 对称加密算法的原理很容易理解,通信一方用KEK加密明文,另一方收到之后用同样的KEY来解密就可以得到明文。
  • 不对称加密算法,使用两把完全不同但又是完全匹配的一对Key:公钥和私钥。在使用不对称加密算法加密文件时,只有使用匹配的一对公钥和私钥,才能完成对明文的加密和解密过程。

3.1:对称加密:

创建一个nodejs文件cipher.js,输入内容如下:

var crypto = require('crypto');  //加载crypto库
console.log(crypto.getCiphers()); //打印支持的cipher算法
结果如下:
  1 [ 'CAST-cbc',
2 'aes-128-cbc',
3 'aes-128-cfb',
4 'aes-128-cfb1',
5 'aes-128-cfb8',
6 'aes-128-ctr',
7 'aes-128-ecb',
8 'aes-128-gcm',
9 'aes-128-ofb',
10 'aes-128-xts',
11 'aes-192-cbc',
12 'aes-192-cfb',
13 'aes-192-cfb1',
14 'aes-192-cfb8',
15 'aes-192-ctr',
16 'aes-192-ecb',
17 'aes-192-gcm',
18 'aes-192-ofb',
19 'aes-256-cbc',
20 'aes-256-cfb',
21 'aes-256-cfb1',
22 'aes-256-cfb8',
23 'aes-256-ctr',
24 'aes-256-ecb',
25 'aes-256-gcm',
26 'aes-256-ofb',
27 'aes-256-xts',
28 'aes128',
29 'aes192',
30 'aes256',
31 'bf',
32 'bf-cbc',
33 'bf-cfb',
34 'bf-ecb',
35 'bf-ofb',
36 'blowfish',
37 'camellia-128-cbc',
38 'camellia-128-cfb',
39 'camellia-128-cfb1',
40 'camellia-128-cfb8',
41 'camellia-128-ecb',
42 'camellia-128-ofb',
43 'camellia-192-cbc',
44 'camellia-192-cfb',
45 'camellia-192-cfb1',
46 'camellia-192-cfb8',
47 'camellia-192-ecb',
48 'camellia-192-ofb',
49 'camellia-256-cbc',
50 'camellia-256-cfb',
51 'camellia-256-cfb1',
52 'camellia-256-cfb8',
53 'camellia-256-ecb',
54 'camellia-256-ofb',
55 'camellia128',
56 'camellia192',
57 'camellia256',
58 'cast',
59 'cast-cbc',
60 'cast5-cbc',
61 'cast5-cfb',
62 'cast5-ecb',
63 'cast5-ofb',
64 'des',
65 'des-cbc',
66 'des-cfb',
67 'des-cfb1',
68 'des-cfb8',
69 'des-ecb',
70 'des-ede',
71 'des-ede-cbc',
72 'des-ede-cfb',
73 'des-ede-ofb',
74 'des-ede3',
75 'des-ede3-cbc',
76 'des-ede3-cfb',
77 'des-ede3-cfb1',
78 'des-ede3-cfb8',
79 'des-ede3-ofb',
80 'des-ofb',
81 'des3',
82 'desx',
83 'desx-cbc',
84 'id-aes128-GCM',
85 'id-aes192-GCM',
86 'id-aes256-GCM',
87 'idea',
88 'idea-cbc',
89 'idea-cfb',
90 'idea-ecb',
91 'idea-ofb',
92 'rc2',
93 'rc2-40-cbc',
94 'rc2-64-cbc',
95 'rc2-cbc',
96 'rc2-cfb',
97 'rc2-ecb',
98 'rc2-ofb',
99 'rc4',
100 'rc4-40',
101 'rc4-hmac-md5',
102 'seed',
103 'seed-cbc',
104 'seed-cfb',
105 'seed-ecb',
106 'seed-ofb' ]

下面是我在项目中用到的对称加密算法:

//在app.js中配置路由
...
var jiami=require("./routes/jiami");
....
app.use("/jiami",jiami);
在service中请求node端路由:
1 $http.post("/app/jiami/encrypt",{str:JSON.stringify(user)}).success(function(miwen){
2 // console.log("返回的密文:"+miwen);
3 }).error(function(error){
4 return deferred.reject(error);
5 });
 1 var secret='pass';//密钥
2
3 //加密
4 router.post("/encrypt",function(req,res){
5 var str=req.body.str;//明文
6 var cipher = crypto.createCipher('aes192', secret);
7 var enc = cipher.update(str, 'utf8', 'hex');//编码方式从utf-8转为hex;
8 enc += cipher.final('hex');//编码方式从转为hex;
9 res.send(enc);
10 });
11 //解密
12 router.post("/decrypt",function(req,res){
13 var str=req.body.str;//明文
14 var decipher = crypto.createDecipher('aes192', secret);
15 var dec = decipher.update(str, 'hex', 'utf8');//编码方式从hex转为utf-8;
16 dec += decipher.final('utf8');//编码方式从utf-8;
17 res.send(dec);
18 });

3.2、非对称加密:这种方法还没用到,待后面继续补充。

NodeJS加密算法(转)的更多相关文章

  1. nodejs中常用加密算法

    在常用的nodejs+express工程中,为了安全在登录及表单传输时,应该都需进行加密传输,目前个人常用到的加密方式有下列几种: 1.Hash算法加密: 创建一个nodejs文件hash.js,输入 ...

  2. 浅析nodeJS中的Crypto模块,包括hash算法,HMAC算法,加密算法知识,SSL协议

    node.js的crypto在0.8版本,这个模块的主要功能是加密解密. node利用 OpenSSL库(https://www.openssl.org/source/)来实现它的加密技术, 这是因为 ...

  3. NodeJS学习笔记 进阶 (2)Nodejs进阶:MD5加密算法(ok)

    个人总结:这篇文章讲解了Nodejs中自带模块的MD5加密算法的使用,读完这篇文章需要15分钟,其实还有一个叫utility的包在npm上,也非常好用. 摘选自网络 简介 MD5(Message-Di ...

  4. nodejs之crypto加密算法

    示例 const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update('some dat ...

  5. Nodejs 中常见的加密算法:RSA(1)

    Linux用户(以Ubuntu为例) $ openssl 进入OpenSSL程序 OpenSSL> genrsa -out rsa_private_key.pem 1024 生成私钥 OpenS ...

  6. 不同程序语言处理加密算法的性能对比(PHP/Golang/NodeJS)

    首先上我最常用且最易用的PHP来做下测试 <?php function test_encrypt($fun, $max) { $begin = microtime(TRUE); $pwdpre ...

  7. 在.NET Core 里使用 BouncyCastle 的DES加密算法

    .NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章<使用 JavaScriptService 在.NET Core 里实现DES加密算法>需要用 ...

  8. 使用 JavaScriptService 在.NET Core 里实现DES加密算法

    文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...

  9. nodejs与javascript中的aes加密

    简介 1.aes加密简单来说,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用.高级加密标准已然成为对称密钥加 ...

随机推荐

  1. 如何批量导入excel数据至数据库(MySql)--工具phpMyAdmin

    之前由于数据储存使用excel保存了所有数据,经过初步数据筛选,数据量近4000条.一条一条录入数据库显然是不可行的.以下是我所操作的步骤: 1.只保留excel的数据部分,去除第一行的具体说明 2. ...

  2. 【JavaScript框架封装】实现一个类似于JQuery的属性框架的封装

    // 属性框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法) xframe.extend({ /** * 获取/设置某一个元素 ...

  3. 分类IP地址

    分类IP地址是将IP地址划分为若干个固定类. IP地址由网络标识字段(netID)和主机标识字段(hostID)组成.IP地址可以标识为: IP地址:: = { <网络标识>,<主机 ...

  4. 常见的dos命令(及抒写方式)

    1.dir:列出当前目录下的主体及文件夹. 2.md:创建目录. 3.rd:删除目录.{注意:rd不能删除非空的文件夹,并且只能用于文件夹的删除} 3.cd :进入指定目录. 4.cd . . :退出 ...

  5. 邓_ Php·面试

    1:PHP的意思,它能干什么?       PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页,英文的全称(Professional Home Pages)1.Web ...

  6. centos 如何执行.bin 文件??

    默认下载,或者上传到 linux 上的 .bin 文件都是白色的,不能被执行. 想要用 ./ 命令去执行,需要先给这个 bin 文件赋权限 chmod u+x 文件名(全名称) 执行完成这个命令,可以 ...

  7. CAD-强电常用符号集

  8. [Azure][Windows Azure介绍]C1了解Windows Azure

    本章介绍了Windows Azure平台,并介绍了该平台提供的不同的服务和解决方案.本章主要针对还不熟悉什么Windows Azure是和它能做什么的读者.如果你已经熟悉了Windows Azure, ...

  9. Java设计模式透析之 —— 模板方法(Template Method)

    今天你还是像往常一样来上班,一如既往地開始了你的编程工作. 项目经理告诉你,今天想在server端添加一个新功能.希望写一个方法.能对Book对象进行处理.将Book对象的全部字段以XML格式进行包装 ...

  10. ios Button

    展现效果例如以下: 功能说明: 1加入来图片背景, 2动态展现百度网页, 3动态加入button. 4展现提示框.展现你点击提示框得index  我成功来你也快来试试. 1 详细得项目创建与拖动but ...