nodejs版本RSA算法封装(SHA1)
故事背景
看到没写过代码的人聊算法细节装X,真的感觉非常逗,又不好意思戳破人家的表演。
这个世界好奇妙,总有那种看了一些周边普及性书籍就开始好为人师、指点江山,乖乖,放到古代很可能就是赵括,能代替廉颇攻秦~
哈哈,貌似说多了,还是传说中的PUK项目,不仅有一个独特的加密数据方法DESede/CBC/PKCS5Padding保障安全,还加了一层RSA签名验证(非对称加密)
普及一下非对称加密,简单地说就是
甲方用自己的【私钥】对机密信息进行加密发送给乙方,乙方再用甲方的【公钥】对甲方发送的数据进行验签。
Talk is cheap,show you the code !
核心代码
const crypto = require("crypto");
/**
* 创建签名(使用私钥和数据)
*
* @param data
* @param privateKey
* @returns {string}
*/
function createSign(data, privateKey) {
const sign = crypto.createSign('RSA-SHA1');
sign.update(data);
sign.end();
return sign.sign(privateKey).toString('base64')
}
/**
* 签名验证(使用公钥、数据、签名)
*
* @param data
* @param sign
* @param publicKey
* @returns {boolean}
*/
function verifySign(data, sign, publicKey) {
const verify = crypto.createVerify('RSA-SHA1');
verify.update(data);
verify.end();
return verify.verify(publicKey, Buffer.from(sign, 'base64'));
}
运行结果
注意,需要生成对应的公钥和私钥,可以使用openssl,也可以使用支付宝的开放工具
//使用公钥加密数据
const privateKey = `-----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAIzOypoBDOR0dLfR8gEdcHMuX97+Qms/KQ7tbsKzC/rbvJ0p3r9Dy5hTzSBR+BpFYDMJD9nnbDFZF7vg5hletPJoD7rN52DqBL3oMPLYN3u2qVRFIMnk0Oy2lBgAZ52VRcZNu5oYQlCvD+vztf7UCpcL2gP6A9zts4bj553N4gUVAgMBAAECgYAgvuKdCAuAgZi3OwrluXvyPWGsUUMO/+RDhXIRs2Pg1gM6JYeYwWJyrWJx1r41Fdc2ZzAZg9lEbKy5U6cPVVgNAwE8m4AHVNVlZJVvx0lGnvnh3XFlCrlKv/FseDQhi52vysVjIy1BDDWEUSnMcjfkwncjEBdzTLFqjbLiLinNwQJBAM9oTJM8j1K0N2qQfRsyRhUxJI+C4MDntK8CGqx0Qvf90dgXNM8FEVxsjDdN/nIMNeRYgXhrBSe+qlequSHtNeUCQQCtzAmNt3yANOymMaU19NWMf6WVeu5/GGBWgyarzffv/A9k16TrcHlMLcEC97ixmtNEB1ItkiJmJv7tzZmFpJ9xAkEAkwPFM6B7nw3rMfgVFc/+6UqaNbd5hIM5CcweCBuo1Ivv0JIydoOLGM5AXXtFXqXVFXS+4RJK5y85I0b6T1gLGQJARla51x1XyhuhW3HkR34bn41Z2rGyLMYU126lDAuEOSBuqoWMPa17qhUqdKUFnvvmXTYJUGBAg89shZocdDY4QQJBAME5svM/2FIuNDU2uqf4/yv32PHH11F9zez16nJFleagTYU6Lt1Hwcw39JyyxHUqOyKdXr/EncGv6zJgldPULbM=
-----END PRIVATE KEY-----`;
let json = `{"name":"chenqionghe","cn":"雪山飞猪","content":"no pain no gain, light weight baby"}`;
let sign = createSign(json, privateKey);
console.log(sign);
//使用公钥验证签名
const publicKey = `-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCMzsqaAQzkdHS30fIBHXBzLl/e/kJrPykO7W7Cswv627ydKd6/Q8uYU80gUfgaRWAzCQ/Z52wxWRe74OYZXrTyaA+6zedg6gS96DDy2Dd7tqlURSDJ5NDstpQYAGedlUXGTbuaGEJQrw/r87X+1AqXC9oD+gPc7bOG4+edzeIFFQIDAQAB
-----END PUBLIC KEY-----`;
console.log(verifySign(json, sign, publicKey));
运行输出
QPLXzRwQ8OFUn0S4c3+WaKO64uK6boQRTH1EAYS00Rh9br3so+ucX2KaIa3F0QZ5REkH96dEbCMWi/s0xAncCrnxKHjm43r2uybWE8qgBr8zVKOPTqwdIAEjIjPwSe8cRb4IAXJkPv6u7x+Qbw+tYrm0L3zvgitKeCl5PNdcEdo=
true
结果为true,可见已经验证通过,算法没问题
nodejs版本RSA算法封装(SHA1)的更多相关文章
- nodejs版本DESede/CBC/PKCS5Padding算法封装(3des)
最近对接了一个第三方支付项目,用的加密算法是根本没听过的:DESede/CBC/PKCS5Padding 这个算法真的是坑爹了,网上搜索了一堆只有java版本是正常的,nodejs版本的各种问题,我了 ...
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
前言 前不久移植了支付宝官方的SDK,以适用ASP.NET Core使用支付宝支付,但是最近有好几位用户反应在Linux下使用会出错,调试发现是RSA加密的错误,下面具体讲一讲. RSA在.NET C ...
- 实现 RSA 算法之基础公式证明(第一章)(老物)
写这篇日志是拖了很久的事情,以前说要写些算法相关的文章给想学信息安全学(简称信安),密码学的同学提供些入门资料,毕竟这种知识教师上课也不会细讲太多(纯理论偏重),更不用说理解和应用了,说到RSA公钥( ...
- (转)RSA算法原理(二)
作者: 阮一峰 日期: 2013年7月 4日 上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解 ...
- RSA算法基础详解
. 首页 博客园 联系我 前言:在RSA诞生之前. RSA算法. 质数与互质数. 模运算. 同余. 欧拉函数. 欧拉定理与模反元素. 真实的例子. 计算密钥. 密钥组成与加解密公式. 安全性. 一点感 ...
- (转)RSA算法原理
RSA算法原理(二) 作者: 阮一峰 日期: 2013年7月 4日 上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我 ...
- RSA算法解析
RSA算法原理(一) 如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果 ...
- 加密算法 - RSA算法二
RSA算法原理(二) 声明: 本文转自阮一峰 (http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html) 有了这些知识, ...
- RSA算法原理(二)
上一次,我介绍了一些数论知识. 有了这些知识,我们就可以看懂RSA算法.这是目前地球上最重要的加密算法. 六.密钥生成的步骤 我们通过一个例子,来理解RSA算法.假设爱丽丝要与鲍勃进行加密通信,她该怎 ...
随机推荐
- Mnist手写数字识别 Tensorflow
Mnist手写数字识别 Tensorflow 任务目标 了解mnist数据集 搭建和测试模型 编辑环境 操作系统:Win10 python版本:3.6 集成开发环境:pycharm tensorflo ...
- Docker 入门教程(4)——docker-compse 服务编排
Docker compose 简介 compose是用来定义和运行多个Docker容器. 比如一个简单的web项目,除了web服务之外,我们可能要需要数据库容器.注册中心容器等等.那我们需要: 定义各 ...
- el-table 操作列(编辑or删除) 获取本行相关数据
简单说明:开发的时候,经常会遇到表格后面跟着操作列,一般都是编辑或者删除,那么 就需要获取到 本行数据相关的id或者其他附属信息.ok,下边放代码 //vue el-table的部分代码 <el ...
- Day03_企业权限管理(SSM整合)
学于黑马程序员和传智播客联合做的教学项目 感谢 黑马程序员官网 传智播客官网 个人根据教程的每天的工作进度的代码和资料 密码:cti5 b站在线视频 微信搜索"艺术行者",关注并回 ...
- Python read和write方法
Python read和write方法: read(): 从文件中读取字符串 注:Python 字符串可以是二进制数据,而不仅仅是文字. 语法: 文件对象.read([count]) count:打开 ...
- python基础day1&2
解决中文乱码问题 在开头加上 -*- encoding:utf-8 -*- if条件 if 条件: 结果#if elif else是单选,只走一条路 num = input('Please input ...
- 记录一次线上实施snmp
公司要实施一个部级的项目,我们公司的提供的产品要对接下客户的一个平台监控平台,该监控平台使用snmp,我们公司的产品不支持snmp,所以由我负责在现网实施snmp,记录这次现网 一.生成编译规则 1. ...
- windows:shellcode 原理
shellcode,一段短小精干的代码,放在任何地方都能执行,不依赖当前所处环境,那么就有这么几点要求: 不能有全局变量:函数里的局部变量在栈空间,地址是执行的时候动态分配的:但全局变量在编译时,会由 ...
- docker 容器使用 systemctl 命令是报错
看了许多解决方案,但是对于新手来说并不友好,不是特别清楚 报错内容: System has not been booted with systemd as init system (PID 1). C ...
- SeaweedFS在.net core下的实践方案(续一)
前言 我们之前已经完成了SeaweedFS在.net core下的使用了,但是说实话,还是不够,于是,我的目光盯住了IApplicationBuilder的扩展方法UseStaticFiles 这个可 ...