RSA加密算法算法
写在前面:网站
了解RSA算法的原理请查看下面的文章ui
一文搞懂 RSA 算法 来源:简书 做者:somenzz加密
在使用 Node 进行 RSA 加密以前咱们首先须要获取RSA公共和私有密钥:spa
1.下载 OpenSSL命令行
两个网址:一个是 官方网站 ,另外一个是社区整理网站code
2.安装 OpenSSL ,查看下面的文章orm
OpenSSL下载安装 来源:简书 做者:涓涓细流_708dblog
3.使用 OpenSSL 生成 RSA 密钥utf-8
a.打开命令行,进入到安装OpenSSL的bin目录下(个人是默认安装到C盘)
cd C:\OpenSSL-Win64\bin
在命令行中执行
openssl genrsa -aes256 -out rsa-key.pem 2048
上面命令的意思是使用 aes256 进行加密,加密密钥长度为 2048 位,并将结果输出到 res-key.pem 文件中,默认将生成的文件输出到 bin 目录下
执行完后是须要输入密码的,这个密码是用来对RSA密钥加密的
b.经过上面的加密文件 rsa-key.pem 生成私有密钥 rsa-prv.pem
openssl rsa -in rsa-key.pem -outform PEM -out rsa-prv.pem
输入以前生成加密文件时输入的密码
c.生成公共密钥 rsa-pub.pem
openssl rsa -in rsa-key.pem -outform PEM -pubout -out rsa-pub.pem
经过上面生成的步骤生成私钥和公钥后,咱们就能够使用Node的方式对文件进行rsa加密
使用 Node 对文件进行 RSA 加密:
'use strict'; const crypto = require('crypto'); const fs = require('fs'); //定义一个同步读取文件的方法 let getFile = (file) => { try { let pubKey = fs.readFileSync(file, 'utf-8'); return pubKey; } catch(err) { console.log(err); return false; } } //读取rsa公钥 let pubKey = getFile('./rsa-pub.pem'); //读取rsa加密私钥 let prvKey = getFile('./rsa-prv.pem'); //读取须要加密的文件 let data = getFile('./data.txt'); //使用私钥加密,公钥解密 const prv_enCrypt = crypto.privateEncrypt(prvKey, Buffer.from(data, 'utf-8') ); const pub_deCrypt = crypto.publicDecrypt(pubKey, prv_enCrypt, 'utf-8'); console.log('使用私钥加密以后的文件: ' + prv_enCrypt.toString('hex')); console.log('使用公钥解密以后的文件: ' + pub_deCrypt.toString()); //除了能够使用私钥加密公钥解密外还能够使用私钥加密公钥解密 const pub_enCrypt = crypto.publicEncrypt(pubKey, Buffer.from(data, 'utf-8')); const prv_deCrypt = crypto.privateDecrypt(prvKey, pub_enCrypt); console.log('使用公钥加密以后的文件: ' + pub_enCrypt.toString('hex')); console.log('使用私钥解密以后的文件: ' + prv_deCrypt.toString()); //加密后的文件使用fs(文件系统模块)导出 let exEncryptFile = fs.createWriteStream('./exEncryptFile.txt') exEncryptFile.write( prv_enCrypt.toString('hex') ); exEncryptFile.end();
注:
1.RSA的加密方法的第二个参数须要传入 buffer 类型的数据
2.data.txt 文件是在同一目录下须要加密的文件,记得在执行上面代码的时候建立一个须要加密的文件
3.RSA加密方法便可以使用公钥加密私钥解密,也能够使用私钥加密公钥解密