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 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
Nodejs学习笔记之NET模块
Jan 13 NodeJs
初探nodeJS
Jan 24 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
NodeJS 实现手机短信验证模块阿里大于功能
Jun 19 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
NodeJs 模仿SIP话机注册的方法
Jun 21 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
nodejs中的异步编程知识点详解
Jan 17 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里的单例类写法实例
2015/06/25 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
2019/04/05 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
JS分割字符串并放入数组的函数
2011/07/04 Javascript
提高javascript效率 一次判断,而不要次次判断
2012/03/30 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
2012/07/31 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
require简单实现单页应用程序(SPA)
2016/07/12 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
原生js简单实现放大镜特效
2017/05/16 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
发布Angular应用至生产环境的方法
2018/12/10 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
原生js实现碰撞检测
2020/03/12 Javascript
VUE动态生成word的实现
2020/07/26 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
python提取字典key列表的方法
2015/07/11 Python
Python实现简单拆分PDF文件的方法
2015/07/30 Python
python实现redis三种cas事务操作
2017/12/19 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
Python requests模块安装及使用教程图解
2020/06/30 Python
历史学专业求职信
2014/06/19 职场文书
Python中的套接字编程是什么?
2021/06/21 Python
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS