首页
Javascript
Html
Css
Node.js
Electron
移动开发
小程序
工具类

服务端

浏览器相关
前端收藏
其他
关于
公司注册

nodejs前后端添加RSA加密验证

2019年12月30日 发布 阅读(4533) 作者:Jerman

这里不讨论密码的生成,生成RSA密码请参考https://www.imqianduan.com/server/RSA-public-private.html

前端添加rsa加密

背景: react项目

前端RSA加密使用jsencrypt,安装:

  1. npm install jsencrypt --save

https://www.npmjs.com/package/jsencrypt

使用,直接上代码

  1. import JSEncrypt from 'jsencrypt';
  2. const Encrypt = new JSEncrypt();
  3. let publicKey = '';
  4. publicKey += '-----BEGIN PUBLIC KEY-----';
  5. publicKey += 'FJDLSKAJKLJ3L2J49FIDSAJFLKSDJAK32FKJDSAFJKDKFKDFJKDSLAFLSAFDKSAFKDASLFD';
  6. publicKey += 'FJDLSKAJKLJ3L2J49FIDSAJFLKSDJAK32FKJDSAFJKDKFKDFJKDSLAFLSAFDKSAFKDASLFD';
  7. publicKey += 'FJDLSKAJKLJ3L2J49FIDSAJFLKSDJAK32FKJDSAFJKDKFKDFJKDSLAFLSAFDKSAFKDASLFD';
  8. publicKey += 'FJDLSKAJKLJ3L2J49FIDSAJF';
  9. publicKey += '-----END PUBLIC KEY-----';
  10. export default {
  11. /**
  12. * 加密一个参数
  13. * @param {*} value 需要加密的值
  14. */
  15. encrypt(value) {
  16. Encrypt.setPublicKey(publicKey);
  17. return Encrypt.encrypt(value);
  18. },
  19. };

注意:

  • 上面代码的公钥当然是错的(不要去试)
  • 公钥有换行,不要偿试把换行去掉,拼成一行

后端(NODEJS)添加RSA解密

背景:nodejs项目

jsencrypt是前端框架,不要偿试在后端使用,后台我们使用node-rsa,安装:
https://www.npmjs.com/package/node-rsa

  1. npm install node-rsa --save

后台RSA的目录结构

  1. .
  2. |-- pem
  3. | |-- rsa_private_key.pem
  4. | `-- rsa_public_key.pem
  5. `-- rsa.js

后台代码(rsa.js):

  1. 'use strict';
  2. const fs = require('fs');
  3. const path = require('path');
  4. const RSA = require('node-rsa');
  5. // RSA解密
  6. const keyPath = path.resolve(__dirname, './pem/rsa_private_key.pem');
  7. const privatePem = fs.readFileSync(keyPath).toString();
  8. const privateKey = new RSA(privatePem);
  9. // 转成pkcs1格式
  10. privateKey.setOptions({ encryptionScheme: 'pkcs1' });
  11. module.exports = {
  12. /**
  13. * 解密
  14. * @param {*} value 需要解密的值
  15. */
  16. decrypt(value) {
  17. let data = value;
  18. // 使用try...catch...捕获解密失败错误(如公钥错误),返回controller处理
  19. try {
  20. data = privateKey.decrypt(value, 'utf8');
  21. return data;
  22. } catch (err) {
  23. return false;
  24. }
  25. },
  26. };

后台调用:

  1. const RSA = require('./rsa/rsa');
  2. // 要解密使用RSA公钥加密的password字段
  3. RSA.decrypt(password)
版权声明:本站文章除特别声明外,均采用署名-非商业性使用-禁止演绎 4.0 国际 许可协议,如需转载,请注明出处