Node.js+crypto模块之用户密码加密解密(bcryptjs随机数加密、AES对称加密算法、RSA非对称加密算法)

一、bcryptjs随机数加密(bcryptjs是一个第三方密码加密库)

1、首先引入bcryptjs库

npm install bcryptjs

  

 

2、【生成随机hash密码】参数10可以改变,但是只能是数字

 

3、【验证hash密码】

 


二、AES对称加密算法(即加解密都用同一个密钥)

1、安装crypto

npm install crypto

 

2、【生成加密密码】参数secret是秘钥,password即用户密码

 

3、【解密密码】注意secret秘钥填写一致, enc即是加密后的密码

 


三、RSA非对称加密算法(需要利用openssl生成私钥和公钥,此处主要参考

3.1、首先生成私钥和公钥(前提:安装好openssl)

【在命令行执行以下命令以生成一个RSA密钥对】

根据提示输入密码,这个密码是用来加密RSA密钥的,加密方式指定为AES256,生成的RSA的密钥长度是2048位。执行成功后,我们获得了加密的rsa-key.pem文件

openssl genrsa -aes256 -out rsa-key.pem 2048

【通过上面的rsa-key.pem加密文件,我们可以导出原始的私钥,命令如下】

输入第一步的密码,我们获得了解密后的私钥

openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem

【下面的命令导出原始的公钥】

这样就准备好了原始私钥文件rsa-prv.pem和原始公钥文件rsa-pub.pem,编码格式均为PEM

openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pem

 

3.2、【引入中间件】fs 模块提供了一个 API,用于以模仿标准 POSIX 函数的方式与文件系统进行交互(即读取文件等)、crypto、path 模块提供用于处理文件路径和目录路径的实用工具

 

3.3、此例子用的私钥加密(privateEncrypt)、公钥解密(publicDecrypt)(也就是可以公钥加密,私钥解密,步骤差不多,就是秘钥和加解密方法名注意更换)

这里主要注意'utf8'参数,试了很多加密解密,可能是之前生成秘钥方式不对,然后就是没有转换编码格式

 

3.4、解密秘钥,'prvKey'在上一步已经定义咯,'enc_by_prv'就是加密之后的密码

 

3.5、实际运用中,注意存储的加密密码用的16进行存储,验证时需要转换为Buffer对象

 

总结:

  1. 问题主要在非对称加密算法,
  2. 注意生成的私钥和公钥的方式、
  3. 读取私钥和公钥时定义编码格式、
  4. 读取用户密码时需要传入Buffer对象(其中也要定义编码格式)
  5. 写给自己的随笔,有问题欢迎指出>..<

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值