NodeJS加密解密及node-rsa加密解密用法详解


Posted in NodeJs onOctober 12, 2018

要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法

初始化环境

新建一个文件夹 node-rsa-demo , 终端进入,运行下面命令初始化

cd node-rsa-demo
npm init # 一路回车即可
npm install --save node-rsa

生成公钥私钥

在 node-rsa-demo 下新建一个文件 index.js 写上如下代码

var NodeRSA = require('node-rsa')
var fs = require('fs')
function generator() {
 var key = new NodeRSA({ b: 512 })
 key.setOptions({ encryptionScheme: 'pkcs1' })
 var privatePem = key.exportKey('pkcs1-private-pem')
 var publicPem = key.exportKey('pkcs1-public-pem')
 fs.writeFile('./pem/public.pem', publicPem, (err) => {
 if (err) throw err
 console.log('公钥已保存!')
 })
 fs.writeFile('./pem/private.pem', privatePem, (err) => {
 if (err) throw err
 console.log('私钥已保存!')
 })
}
generator();

先在 node-rsa-demo 文件夹下新建一个文件夹 pem 用来存放密钥的,然后执行 node index.js ,会发现在 pem 文件夹下生成了两个文件

  • private.pem
  • public.pem

加密

加密 hello world 这个字符串

function encrypt() {
 fs.readFile('./pem/private.pem', function (err, data) {
 var key = new NodeRSA(data);
 let cipherText = key.encryptPrivate('hello world', 'base64');
 console.log(cipherText);
 });
}
//generator();
encrypt();

然后执行 node index.js 终端里会输出一串类似

fH1aVCUceJYVvt1tZ7WYc1Dh5dVCd952GY5CX283V/wK2229FLgT9WfRNAPMjbTtwL9ghVeYD4Lsi6yM1t4OqA== 的base64字符串,这就是用私钥加密后的密文了

解密

把上一步加密获得的密文复制粘贴到下面要解密的方法内

function decrypt() {
 fs.readFile('./pem/public.pem', function (err, data) {
 var key = new NodeRSA(data);
 let rawText = key.decryptPublic('fH1aVCUceJYVvt1tZ7WYc1Dh5dVCd952GY5CX283V/wK2229FLgT9WfRNAPMjbTtwL9ghVeYD4Lsi6yM1t4OqA==', 'utf8');
 console.log(rawText);
 });
}
//generator();
//encrypt();
decrypt();

执行 node index.js 会发现又拿到 hello world

参考

https://github.com/rzcoder/node-rsa

PS:下面通过一段代码看下nodejs加密解密

nodejs是通集成在内核中的crypto模块来完成加密解密。

常用加密解密模块化代码:

/**
 * Created by linli on 2015/8/25.
 */
var crypto = require('crypto');

//加密
exports.cipher = function(algorithm, key, buf) {
 var encrypted = "";
 var cip = crypto.createCipher(algorithm, key);
 encrypted += cip.update(buf, 'binary', 'hex');
 encrypted += cip.final('hex');
 return encrypted
};

//解密
exports.decipher = function(algorithm, key, encrypted) {
 var decrypted = "";
 var decipher = crypto.createDecipher(algorithm, key);
 decrypted += decipher.update(encrypted, 'hex', 'binary');
 decrypted += decipher.final('binary');
 return decrypted
};

此处,只针对可逆加密。

总结

以上所述是小编给大家介绍的NodeJS加密解密及node-rsa加密解密用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

NodeJs 相关文章推荐
使用forever管理nodejs应用教程
Jun 03 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 NodeJs
nodejs如何获取时间戳与时间差
Aug 03 NodeJs
nodejs+express实现文件上传下载管理网站
Mar 15 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
NodeJS使用Range请求实现下载功能的方法示例
Oct 12 #NodeJs
nodejs实现范围请求的实现代码
Oct 12 #NodeJs
NodeJS搭建HTTP服务器的实现步骤
Oct 12 #NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 #NodeJs
nodejs aes 加解密实例
Oct 10 #NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 #NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 #NodeJs
You might like
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
学习ExtJS form布局
2009/10/08 Javascript
jQuery 开发者应该注意的9个错误
2012/05/03 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
vue + socket.io实现一个简易聊天室示例代码
2017/03/06 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
通过封装scroll.js 获取滚动条的值
2018/07/13 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
微信小程序实现的动态设置导航栏标题功能示例
2019/01/31 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
layui监听下拉选框选中值变化的方法(包含监听普通下拉选框)
2019/09/24 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
python+django+sql学生信息管理后台开发
2018/01/11 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
苹果音乐订阅:Apple Music
2018/08/02 全球购物
实习生自我鉴定范文
2013/12/05 职场文书
学前教育毕业生自荐信范文
2013/12/24 职场文书
学前教育求职自荐信范文
2013/12/25 职场文书
超市5.1促销活动
2014/01/15 职场文书
《钱学森》听课反思
2014/03/01 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
2015大学生暑期实习报告
2015/07/13 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
用Python将GIF动图分解成多张静态图片
2021/06/11 Python
什么是SOLID
2022/03/24 Javascript
golang为什么要统一错误处理
2022/04/03 Golang