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 相关文章推荐
Nodejs学习笔记之NET模块
Jan 13 NodeJs
NodeJS学习笔记之FS文件模块
Jan 13 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
nodejs实现邮件发送服务实例分享
Mar 29 NodeJs
详解nodejs通过代理(proxy)发送http请求(request)
Sep 22 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
nodejs用gulp管理前端文件方法
Jun 24 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
关于NodeJS中的循环引用详解
Jul 23 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
phpmailer发送gmail邮件实例详解
2013/06/24 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
详解js实现线段交点的三种算法
2016/08/09 Javascript
javascript轮播图算法
2016/10/21 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
ES6中的类(Class)示例详解
2020/12/09 Javascript
深入解析Python中的线程同步方法
2016/06/14 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python产生Gnuplot绘图数据的方法
2018/11/09 Python
Win下PyInstaller 安装和使用教程
2019/12/25 Python
python使用SQLAlchemy操作MySQL
2020/01/02 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
ReVive利维肤美国官网:RéVive Skincare
2018/04/18 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
求职者应聘的自我评价
2013/10/16 职场文书
四个太阳教学反思
2014/02/01 职场文书
追悼会主持词
2014/03/20 职场文书
企业厂务公开实施方案
2014/03/26 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
vue中 this.$set的使用详解
2021/11/17 Vue.js