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 npm install全局安装和本地安装的区别
Jun 05 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
nodejs教程之制作一个简单的文章发布系统
Nov 21 NodeJs
nodeJS代码实现计算交社保是否合适
Mar 09 NodeJs
NodeJs读取JSON文件格式化时的注意事项
Sep 25 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
详解Nodejs内存治理
May 13 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 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中使用gettext来支持多语言的方法
2011/05/02 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
PHP下的Oracle客户端扩展(OCI8)安装教程
2014/09/10 PHP
php限制文件下载速度的代码
2015/10/20 PHP
Paypal实现循环扣款(订阅)功能
2017/03/23 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
jquery 注意事项与常用语法小结
2010/06/07 Javascript
javascript学习笔记(七) js函数介绍
2012/06/19 Javascript
js jquery数组介绍
2012/07/15 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
js实现弹出窗口、页面变成灰色并不可操作的例子分享
2014/05/10 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
jQuery动态添加
2016/04/07 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
vue缓存的keepalive页面刷新数据的方法
2019/04/23 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
python中有函数重载吗
2020/05/28 Python
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
项目建议书
2015/02/04 职场文书
升职自我推荐信范文
2015/03/25 职场文书
2016优秀班主任个人先进事迹材料
2016/02/26 职场文书
公证书
2019/04/17 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery