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的url截取模块url-extract的使用实例
Nov 18 NodeJs
nodejs教程之环境安装及运行
Nov 21 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
配置nodejs环境的方法
May 13 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
nodejs 图片预览和上传的示例代码
Sep 30 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
详解Nodejs get获取远程服务器接口数据
Mar 26 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 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
基于mysql的论坛(1)
2006/10/09 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
学习ExtJS(二) Button常用方法
2009/10/07 Javascript
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
网站内容禁止复制和粘贴、另存为的js代码
2014/02/26 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
如何理解Vue的.sync修饰符的使用
2017/08/17 Javascript
vue 全选与反选的实现方法(无Bug 新手看过来)
2018/02/09 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
详解无限滚动插件vue-infinite-scroll源码解析
2019/05/12 Javascript
jquery操作select常见方法大全【7种情况】
2019/05/28 jQuery
Vue.js中的组件系统
2019/05/30 Javascript
vue.js中ref及$refs的使用方法解析
2019/10/08 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
Python多线程编程(七):使用Condition实现复杂同步
2015/04/05 Python
Python爬取APP下载链接的实现方法
2016/09/30 Python
Python实现Linux中的du命令
2017/06/12 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python(PyS60)实现简单语音整点报时
2019/11/18 Python
Python threading.local代码实例及原理解析
2020/03/16 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
博朗(Braun)俄罗斯官方商店:德国小家电品牌
2019/09/24 全球购物
《望洞庭》教学反思
2014/02/16 职场文书
店长岗位职责
2015/02/11 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
导游词之广州陈家祠
2019/10/21 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS