一、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
,编码格式均为PEMopenssl 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对象
总结:
- 问题主要在非对称加密算法,
- 注意生成的私钥和公钥的方式、
- 读取私钥和公钥时定义编码格式、
- 读取用户密码时需要传入Buffer对象(其中也要定义编码格式)
- 写给自己的随笔,有问题欢迎指出>..<