Node.js 内置模块crypto加密模块(5) RSA
写在前面:
了解RSA算法的原理请查看下面的文章
一文搞懂 RSA 算法 来源:简书 作者:somenzz
在使用 Node 进行 RSA 加密之前我们首先需要获取RSA公共和私有密钥:
1.下载 OpenSSL
2.安装 OpenSSL ,查看下面的文章
OpenSSL下载安装 来源:简书 作者:涓涓细流_708d
3.使用 OpenSSL 生成 RSA 密钥
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加密方法即可以使用公钥加密私钥解密,也可以使用私钥加密公钥解密
Node.js 内置模块crypto加密模块(5) RSA的更多相关文章
- Node.js 内置模块crypto加密模块(4) Diffie Hellman
Diffie-Hellman( DH ):密钥交换协议/算法 ( Diffie-Hellman Key Exchange/Agreement Algorithm ) 百科摘录: Diffie-Hell ...
- Node.js 内置模块crypto加密模块(3) HMAC
HMAC:哈希消息认证码 ( Hash-based Message Authentication Code ) HMAC是密钥相关的哈希算法 使用 HMAC 进行加密的Node实现的一种方法: &qu ...
- Node.js 内置模块crypto加密模块(2) AES
AES:高级加密标准 ( Advanced Encryption Standard ) AES是一种对称加密算法:加密需要密钥,且加密密钥和解密密钥相同 下面是AES加密的Node实现: " ...
- Node.js 内置模块crypto加密模块(1) MD5 和 SHA
MD5:消息摘要算法(Message-Digest Algorithm) SHA家族:安全散列算法( Secure Hash Algorithm ) 1.首先看一个简单的加密 "use st ...
- Node.js 内置模块crypto使用事件方法(onreadable)加密的一些问题
javaScript代码如下: 'use strict'; const crypto = require('crypto'); //实例化一个AES加密对象 const aesEncrept = cr ...
- [Node.js] Gzip + crypto in stream
We can using gzip and crypto with stream: const fs = require('fs') const zlib = require('zlib') cons ...
- Node.js 内置模块fs(文件系统)
fs模块的三个常用方法 1.fs.readFile() -- 读文件 2.fs.writeFile() -- 写文件 3.fa.stat() -- 查看文件信息 fs模块不同于其它模块的地方是它有异步 ...
- Node.js 内置模块fs的readdir方法 查看某个文件夹里面包含的文件内容
fs.readdir(path[, options], callback) 例: "use strict"; const fs = require("fs"); ...
- Node.js 内置模块Stream(流)
"流"是一种抽象的数据结构 通过使用"流"可以将一段数据分割成几段,并按顺序传输,使用"流"可以降低对系统性能的要求,减少对CPU的消耗 S ...
随机推荐
- LeetCode:砖墙【554】
LeetCode:砖墙[554] 题目描述 你的面前有一堵方形的.由多行砖块组成的砖墙. 这些砖块高度相同但是宽度不同.你现在要画一条自顶向下的.穿过最少砖块的垂线. 砖墙由行的列表表示. 每一行都是 ...
- webpack-dev-server原理及要点笔记
webpack-dev-server启动了一个使用express的Http服务器,这个服务器与客户端采用websocket通信协议,当原始文件发生改变,webpack-dev-server会实时编译. ...
- 吴恩达机器学习笔记(九) —— 异常检测(Anomaly detection)
主要内容: 一.模型介绍 二.算法过程 三.算法性能评估及ε(threshold)的选择 四.Anomaly detection vs Supervised learning 五.Multivaria ...
- RQNOJ 117 最佳课题选择:多重背包
题目链接:https://www.rqnoj.cn/problem/117 题意: NaCN_JDavidQ要在下个月交给老师n篇论文,论文的内容可以从m个课题中选择. 由于课题数有限,NaCN_JD ...
- 获取url的参数
function getPrams () { var url, urlPrams, urlPramsArr=[], item=[], prams={}; url = location.href; if ...
- google IO大会
怎么参加一次 Google I/O?大概要多少预算? Google I/O(参加Goole I/O 是我的一个梦想,因为我是Google死忠,想亲自去Google总部看看,所以想知道这些) 费用构成: ...
- Ubuntu下安装deb包命令
原文地址:http://www.xitongzhijia.net/xtjc/20150206/37464.html 1.下载需要安装的deb包,输入以下命令安装: sudo dpkg -i packa ...
- 集训Day6
今天的图论题略多 但好像都是noip题 bzoj3624 有一个图,边是黑色或者白色,求一个生成树满足恰好有k条白边 贪心 我们把最小生成树上的白边叫做“富家子弟”,把不在树上的叫“贫下中农” 很明显 ...
- HihoCoder1649 : 漏写的数字([Offer收割]编程练习赛38)(模拟题)
描述 小A今年刚上幼儿园,正在学习写100以内的数字.幼儿园的老师留了一项作业,要求小A从某个100以内的数X开始一直写到另一个100以内的数Y(Y - X > 1). 不过粗心的小A在作业中漏 ...
- 洛谷 P2285 [HNOI2004]打鼹鼠
题目描述 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气. ...