经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JSJS库框架 » JavaScript » 查看文章
NodeJS加密解密及node-rsa加密解密用法详解
来源:jb51  时间:2018/10/15 8:59:55  对本文有异议

要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法

初始化环境

新建一个文件夹 node-rsa-demo , 终端进入,运行下面命令初始化

  1. cd node-rsa-demo
  2. npm init # 一路回车即可
  3. npm install --save node-rsa

生成公钥私钥

在 node-rsa-demo 下新建一个文件 index.js 写上如下代码

  1. var NodeRSA = require('node-rsa')
  2. var fs = require('fs')
  3. function generator() {
  4. var key = new NodeRSA({ b: 512 })
  5. key.setOptions({ encryptionScheme: 'pkcs1' })
  6. var privatePem = key.exportKey('pkcs1-private-pem')
  7. var publicPem = key.exportKey('pkcs1-public-pem')
  8. fs.writeFile('./pem/public.pem', publicPem, (err) => {
  9. if (err) throw err
  10. console.log('公钥已保存!')
  11. })
  12. fs.writeFile('./pem/private.pem', privatePem, (err) => {
  13. if (err) throw err
  14. console.log('私钥已保存!')
  15. })
  16. }
  17. generator();

先在 node-rsa-demo 文件夹下新建一个文件夹 pem 用来存放密钥的,然后执行 node index.js ,会发现在 pem 文件夹下生成了两个文件

  • private.pem
  • public.pem

加密

加密 hello world 这个字符串

  1. function encrypt() {
  2. fs.readFile('./pem/private.pem', function (err, data) {
  3. var key = new NodeRSA(data);
  4. let cipherText = key.encryptPrivate('hello world', 'base64');
  5. console.log(cipherText);
  6. });
  7. }
  8. //generator();
  9. encrypt();

然后执行 node index.js 终端里会输出一串类似

fH1aVCUceJYVvt1tZ7WYc1Dh5dVCd952GY5CX283V/wK2229FLgT9WfRNAPMjbTtwL9ghVeYD4Lsi6yM1t4OqA== 的base64字符串,这就是用私钥加密后的密文了

解密

把上一步加密获得的密文复制粘贴到下面要解密的方法内

  1. function decrypt() {
  2. fs.readFile('./pem/public.pem', function (err, data) {
  3. var key = new NodeRSA(data);
  4. let rawText = key.decryptPublic('fH1aVCUceJYVvt1tZ7WYc1Dh5dVCd952GY5CX283V/wK2229FLgT9WfRNAPMjbTtwL9ghVeYD4Lsi6yM1t4OqA==', 'utf8');
  5. console.log(rawText);
  6. });
  7. }
  8. //generator();
  9. //encrypt();
  10. decrypt();

执行 node index.js 会发现又拿到 hello world

参考

https://github.com/rzcoder/node-rsa

PS:下面通过一段代码看下nodejs加密解密

nodejs是通集成在内核中的crypto模块来完成加密解密。

常用加密解密模块化代码:

  1. /**
  2. * Created by linli on 2015/8/25.
  3. */
  4. var crypto = require('crypto');
  5.  
  6. //加密
  7. exports.cipher = function(algorithm, key, buf) {
  8. var encrypted = "";
  9. var cip = crypto.createCipher(algorithm, key);
  10. encrypted += cip.update(buf, 'binary', 'hex');
  11. encrypted += cip.final('hex');
  12. return encrypted
  13. };
  14.  
  15. //解密
  16. exports.decipher = function(algorithm, key, encrypted) {
  17. var decrypted = "";
  18. var decipher = crypto.createDecipher(algorithm, key);
  19. decrypted += decipher.update(encrypted, 'hex', 'binary');
  20. decrypted += decipher.final('binary');
  21. return decrypted
  22. };

此处,只针对可逆加密。

总结

以上所述是小编给大家介绍的NodeJS加密解密及node-rsa加密解密用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号