浅析Node.js非对称加密方法


Posted in Javascript onJanuary 29, 2018

前言

刚回答了SegmentFault上一个兄弟提的问题《非对称解密出错》。这个属于Node.js在安全上的应用,遇到同样问题的人应该不少,基于回答的问题,这里简单总结下。

非对称加密的理论知识,可以参考笔者前面的文章《NODEJS进阶:CRYPTO模块之理论篇》。

完整的代码可以在 《Nodejs学习笔记》 找到,也欢迎大家关注 程序猿小卡的GitHub。

加密、解密方法

在Node.js中,负责安全的模块是crypto。非对称加密中,公钥加密,私钥解密,加解密对应的API分别如下。

加密函数:

crypto.publicEncrypt(key, buffer)

解密函数:

crypto.privateDecrypt(privateKey, buffer)

入门例子

假设有如下utils.js

// utils.js
const crypto = require('crypto');
// 加密方法
exports.encrypt = (data, key) => {
 // 注意,第二个参数是Buffer类型
 return crypto.publicEncrypt(key, Buffer.from(data));
};
// 解密方法
exports.decrypt = (encrypted, key) => {
 // 注意,encrypted是Buffer类型
 return crypto.privateDecrypt(key, encrypted);
};

测试代码app.js:

const utils = require('./utils');
const keys = require('./keys');
const plainText = '你好,我是程序猿小卡';
const crypted = utils.encrypt(plainText, keys.pubKey); // 加密
const decrypted = utils.decrypt(crypted, keys.privKey); // 解密
console.log(decrypted.toString()); // 你好,我是程序猿小卡

附上公钥、私钥 keys.js:

exports.privKey = `-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDFWnl8fChyKI/Tgo1ILB+IlGr8ZECKnnO8XRDwttBbf5EmG0qV
8gs0aGkh649rb75I+tMu2JSNuVj61CncL/7Ct2kAZ6CZZo1vYgtzhlFnxd4V7Ra+
aIwLZaXT/h3eE+/cFsL4VAJI5wXh4Mq4Vtu7uEjeogAOgXACaIqiFyrk3wIDAQAB
AoGBAKdrunYlqfY2fNUVAqAAdnvaVOxqa+psw4g/d3iNzjJhBRTLwDl2TZUXImEZ
QeEFueqVhoROTa/xVg/r3tshiD/QC71EfmPVBjBQJJIvJUbjtZJ/O+L2WxqzSvqe
wzYaTm6Te3kZeG/cULNMIL+xU7XsUmslbGPAurYmHA1jNKFpAkEA48aUogSv8VFn
R2QuYmilz20LkCzffK2aq2+9iSz1ZjCvo+iuFt71Y3+etWomzcZCuJ5sn0w7lcSx
nqyzCFDspQJBAN3O2VdQF3gua0Q5VHmK9AvsoXLmCfRa1RiKuFOtrtC609RfX4DC
FxDxH09UVu/8Hmdau8t6OFExcBriIYJQwDMCQQCZLjFDDHfuiFo2js8K62mnJ6SB
H0xlIrND2+/RUuTuBov4ZUC+rM7GTUtEodDazhyM4C4Yq0HfJNp25Zm5XALpAkBG
atLpO04YI3R+dkzxQUH1PyyKU6m5X9TjM7cNKcikD4wMkjK5p+S2xjYQc1AeZEYq
vc187dJPRIi4oC3PN1+tAkBuW51/5vBj+zmd73mVcTt28OmSKOX6kU29F0lvEh8I
oHiLOo285vG5ZtmXiY58tAiPVQXa7eU8hPQHTHWa9qp6
-----END RSA PRIVATE KEY-----
`;
exports.pubKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFWnl8fChyKI/Tgo1ILB+IlGr8
ZECKnnO8XRDwttBbf5EmG0qV8gs0aGkh649rb75I+tMu2JSNuVj61CncL/7Ct2kA
Z6CZZo1vYgtzhlFnxd4V7Ra+aIwLZaXT/h3eE+/cFsL4VAJI5wXh4Mq4Vtu7uEje
ogAOgXACaIqiFyrk3wIDAQAB
-----END PUBLIC KEY-----
`;
Javascript 相关文章推荐
中文路径导致unitpngfix.js不正常的解决方法
Jun 26 Javascript
技术男用来对妹子表白的百度首页
Jul 23 Javascript
jquery制作select列表双向选择示例代码
Sep 02 Javascript
Javascript核心读书有感之语言核心
Feb 01 Javascript
react开发教程之React 组件之间的通信方式
Aug 12 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
Oct 20 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 Javascript
JavaScript两种计时器的实例讲解
Jan 31 Javascript
js中对象与对象创建方法的各种方法
Feb 27 Javascript
微信小程序 slot踩坑的解决
Apr 01 Javascript
微信小程序picker组件两列关联使用方式
Oct 27 Javascript
二维码条形码生成的JavaScript脚本库
Jul 07 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 #Javascript
使用Vue写一个datepicker的示例
Jan 27 #Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 #Javascript
浅谈React中组件间抽象
Jan 27 #Javascript
React Native中NavigatorIOS组件的简单使用详解
Jan 27 #Javascript
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 #Javascript
使用D3.js创建物流地图的示例代码
Jan 27 #Javascript
You might like
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
PHP中curl_setopt函数用法实例分析
2015/04/16 PHP
php微信支付接口开发程序
2016/08/02 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
laravel多条件查询方法(and,or嵌套查询)
2019/10/09 PHP
FCK调用方法..
2006/12/21 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
2018/07/07 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
element-ui 本地化使用教程详解
2019/10/28 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
python石头剪刀布小游戏(三局两胜制)
2021/01/20 Python
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
python中remove函数的踩坑记录
2021/01/04 Python
Android面试题及答案
2015/09/04 面试题
妇产医师自荐信
2014/01/29 职场文书
中秋节礼品促销方案
2014/02/02 职场文书
购房意向书
2014/04/01 职场文书
关于诚信的活动方案
2014/08/18 职场文书
财会专业大学生求职信
2014/09/26 职场文书
补充协议书
2015/01/28 职场文书
食品质检员岗位职责
2015/04/08 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang
再谈python_tkinter弹出对话框创建
2022/03/20 Python
python如何将mat文件转为png
2022/07/15 Python