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框架Express的模板视图机制分析
Jul 19 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
Windows系统中安装nodejs图文教程
Feb 28 NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 NodeJs
详解nodejs爬虫程序解决gbk等中文编码问题
Apr 06 NodeJs
详解nodejs的express如何自动生成项目框架
Jul 12 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
使用koa-log4管理nodeJs日志笔记的使用方法
Nov 30 NodeJs
nodejs dgram模块广播+组播的实现示例
Nov 04 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
PHP字符串中特殊符号的过滤方法介绍
2014/02/18 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
Yii2中使用asset压缩js,css文件的方法
2016/11/24 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
javascript 去字符串空格终极版(支持utf8)
2009/11/14 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
js中精确计算加法和减法示例
2014/03/28 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
浅谈React Event实现原理
2018/09/20 Javascript
validform表单验证的实现方法
2019/03/08 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
python 从远程服务器下载东西的代码
2013/02/10 Python
对于Python编程中一些重用与缩减的建议
2015/04/14 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python OpenCV获取视频的方法
2018/02/28 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
Python多线程多进程实例对比解析
2020/03/12 Python
keras绘制acc和loss曲线图实例
2020/06/15 Python
美国最大的香水出口:FragranceX.com
2017/11/04 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
教育学专业实习生的自我鉴定
2013/11/26 职场文书
《一件运动衫》教学反思
2014/02/19 职场文书
会计学习心得体会
2014/09/09 职场文书
民主评议党员自我评价材料
2014/09/18 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
2015年材料员工作总结
2015/04/30 职场文书
学校远程教育工作总结
2015/08/11 职场文书
出纳2015年度工作总结范文
2015/10/14 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python