Node.JS用RSA签名算法公钥加密私钥解密,实现License软件授权验证

栏目: Node.js · 发布时间: 7年前

内容简介:在Node.JS经常用加密算法对一些敏感用户数据进行加密,比如说用户密码。而且用户密码不需要考虑解密,如果用户遗失密度,重置成新的已经新密码即可。此时用不可逆加密算法即可,对比加密后的字符串即可。还有一些应用需要解密出原内容的,比如说HTTPS的传输。使用公钥对HTTP请求进行加密,在服务器用私钥解密。此时需要用到不对称加密算法,在Node.JS中这种机制很容易实现。因为我们要更改私钥,加入我们的版本信息,所以我们使用openssl生成私钥,命令行输入:

在Node.JS经常用加密算法对一些敏感用户数据进行加密,比如说用户密码。而且用户密码不需要考虑解密,如果用户遗失密度,重置成新的已经新密码即可。此时用不可逆加密算法即可,对比加密后的字符串即可。

还有一些应用需要解密出原内容的,比如说HTTPS的传输。使用公钥对HTTP请求进行加密,在服务器用私钥解密。此时需要用到不对称加密算法,在Node.JS中这种机制很容易实现。

生成公钥和私钥

Node.JS中v10.12.0以上的版本,新添加 了 generateKeyPair方法可以用来创建公钥私钥:

crypto.generateKeyPair(type, options, callback) #

Added in: v10.12.0

因为我们要更改私钥,加入我们的版本信息,所以我们使用openssl生成私钥,命令行输入:

openssl genrsa -out private.pem 1024

输出如下:

Generating RSA private key, 1024 bit long modulus
........................++++++
................++++++
e is 65537 (0x10001)

私钥是一段随机字符串。生成之后,您可以修改这个文件将部分内容换成您的版权声明,以备长期使用。私钥只在软件授权服务器上使用,普通用户无法获得。

openssl rsa -in private.pem -pubout -out public.pem

输出:

$ openssl rsa -in private.pem -pubout -out public.pem
writing RSA key

由此可见,公钥是可以根据私钥推导生成出来的。因此要保证私租的安全。

用私钥创建签名

node.js 也封装了签名认证机制,然后可以用这个私钥进行签名验证:

var crypto  = require('crypto')
var fs      = require('fs')

var privateKey  = fs.readFileSync('private.pem').toString()
var publicKey   = fs.readFileSync('public.pem').toString()

var sign = crypto.createSign('SHA256');
sign.update('ourjs.com copy right');

var signature = sign.sign(privateKey, 'hex');
console.log(signature);

输出:

9d59c61117f121c26895dfe08a207e454560e5bef1c7837d6a7fdb92acc9f08f2b6d7e09eef49e7982ffa4e6110d510f6529b6ee49d0d576a8f09e62c4f9b80b7d41ec65290e7192c7e292d8a87f9a970afc01f95e86595ee9267726eeff3ea442e1d353f2a2c36bdf33d00ab9b292dda43fe7a086eaf8e853c4b9081a12330a

验证签名:

var verify = crypto.createVerify('SHA256');
verify.write('ourjs.com copy right');
verify.end();

console.log(verify.verify(publicKey, signature, 'hex'));

输出:

true

代表签名内容相符。

私钥加密公钥解密

在客户端,如果仅需要私钥加密,公钥解密。比如软件授权方用公钥解密出软件授权信息,购买方名称,购买时间等。

这种情况Node.JS做了很好的封装,调用两个函数即可:

var signature = crypto.privateEncrypt(privateKey, Buffer.from('OurJS.com私钥加密公钥解密测试'))
var decrypted = crypto.publicDecrypt(publicKey, signature);
console.log(decrypted.toString())
> OurJS.com私钥加密公钥解密测试

公钥加密私钥解密

传统的RSA用公钥加密,私钥解密过程,使用publicEncrypt/ privateDecrypt 方法:

var encrypted = crypto.publicEncrypt(publicKey, Buffer.from('OurJS.com公钥加密私钥解密测试'))
var decrypted = crypto.privateDecrypt(privateKey, encrypted);
console.log(decrypted.toString())
OurJS.com私钥加密公钥解密测试

以上所述就是小编给大家介绍的《Node.JS用RSA签名算法公钥加密私钥解密,实现License软件授权验证》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

面向对象分析与设计

面向对象分析与设计

Grady Booch、Robert A. Maksimchuk、Michael W. Engel、Bobbi J. Young、Jim Conallen、Kelli A. Houston / 王海鹏、潘加宇 / 人民邮电出版社 / 2009-8 / 79.00元

《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的实际需要。《面向对象分析与设计(第3版)》通过大量例子说明了基本概念,解释了方法,并展示了在不同领域的成功应用。全书分为理论和应用两部分。理论部分深刻剖析了面向对象分析与设计(OOA......一起来看看 《面向对象分析与设计》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器