当前位置:   article > 正文

vue前端RSA使用公钥进行加密,公钥进行解密

vue前端RSA使用公钥进行加密,公钥进行解密

记录下RSA使用公钥进行加密,公钥进行解密:

背景:由于项目要求前后端进行数据加密传输,具体数据使用aes进行加密,aes密钥使用rsa进行加密,加密后的aes密钥放在请求头和响应头进行传输。这里实现的是前端vue使用rsa对aes的密钥进行加密解密。

第一步:安装jsencrypt控件

npm i jsencrypt  --force

第二步: 从node-modules中复制jsencrypt整个文件夹,这里我复制放到了src/libs目录下,修改jsencrypt配置文件中的内容

第三步:修改src/libs/jsencrypt/lib/lib/jsbn/rsa.js文件

  1. 1. 修改 RSAKey.prototype.decryptthis.doPrivate(c) 为 this.doPublic(c);
  2. RSAKey.prototype.decrypt = function (ctext) {
  3. var c = parseBigInt(ctext, 16);
  4. var m = this.doPublic(c);
  5. //var m = this.doPrivate(c);
  6. if (m == null) {
  7. return null;
  8. }
  9. return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);
  10. };
  11. 2. 修改 pkcs1unpad2 注释代码
  12. function pkcs1unpad2(d, n) {
  13. var b = d.toByteArray();
  14. var i = 0;
  15. while (i < b.length && b[i] == 0) {
  16. ++i;
  17. }
  18. // 注释该处代码
  19. // if (b.length - i != n - 1 || b[i] != 2) {
  20. // return null;
  21. // }
  22. ++i;
  23. while (b[i] != 0) {
  24. if (++i >= b.length) {
  25. return null;
  26. }
  27. }
  28. var ret = "";
  29. while (++i < b.length) {
  30. var c = b[i] & 255;
  31. if (c < 128) { // utf-8 decode
  32. ret += String.fromCharCode(c);
  33. } else if ((c > 191) && (c < 224)) {
  34. ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));
  35. ++i;
  36. } else {
  37. ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));
  38. i += 2;
  39. }
  40. }
  41. return ret;
  42. }

第四步:进行使用。

解密工具

  1. /**
  2. * 非对称加密-RSA
  3. * 后端私钥加密 - 前端公钥解密
  4. */
  5. /**
  6. * 非对称加密-RSA
  7. * 后端私钥加密 - 前端公钥解密
  8. */
  9. import { JSEncrypt } from '../libs/jsencrypt/lib/JSEncrypt'
  10. const PUBLICKEY = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
  11. export const RSADECRY = {
  12. /**
  13. * rsa公钥加密
  14. * @param {*} key
  15. * @returns
  16. */
  17. setRsaByPublicKey(key) {
  18. const jsencrypt = new JSEncrypt()
  19. jsencrypt.setPublicKey(rsaPublicKey)
  20. return jsencrypt.encrypt(key)
  21. },
  22. /**
  23. * rsa私钥解密
  24. * @param {*} key
  25. * @returns
  26. */
  27. decryptRsaByPrivateKey(key) {
  28. const decrypt = new JSEncrypt()
  29. decrypt.setPrivateKey(rsaPrivateKey)
  30. // 下文的""为了防止存于localStorage中的信息被不小心损坏
  31. return decrypt.decrypt(key) || ""
  32. },
  33. /**
  34. * 公钥解密
  35. * @param secretWord
  36. * @returns {解密|string|false|PromiseLike<ArrayBuffer>}
  37. */
  38. decryptByPublicKey: function (val = '') {
  39. if (val === '') {
  40. return '';
  41. }
  42. let encrypt = new JSEncrypt();
  43. encrypt.setPublicKey(rsaPublicKey);
  44. //使用公钥对私钥加密后的数据解密
  45. return encrypt.decrypt(val);
  46. }
  47. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/65785
推荐阅读
相关标签
  

闽ICP备14008679号