用NODE RSA JS 加密解密正常,用JAVA RSAUtils工具类加密解密正常。但是用node加密玩的java解密不了。原因:node默认的是

DEFAULT_ENCRYPTION_SCHEME = 'pkcs1_oaep'  而java中默认的是pkcs1。

node-rsa源码:https://github.com/rzcoder/node-rsa/blob/ea5c17d9351c857c0594d7921c596ff5636882f1/src/NodeRSA.js

var DEFAULT_ENCRYPTION_SCHEME = 'pkcs1_oaep';

node-rsa官方文档:https://www.npmjs.com/package/node-rsa

Options

You can specify some options by second/third constructor argument, or over key.setOptions()method.

  • environment — working environment (default autodetect):

    • 'browser' — will run pure js implementation of RSA algorithms.
    • 'node' for nodejs >= 0.10.x or io.js >= 1.x — provide some native methods like sign/verify and encrypt/decrypt.
  • encryptionScheme — padding scheme for encrypt/decrypt. Can be 'pkcs1_oaep' or 'pkcs1'. Default 'pkcs1_oaep'.
  • signingScheme — scheme used for signing and verifying. Can be 'pkcs1' or 'pss' or 'scheme-hash' format string (eg 'pss-sha1'). Default 'pkcs1-sha256', or, if chosen pss: 'pss-sha1'.

Notice: This lib supporting next hash algorithms: 'md5''ripemd160''sha1''sha256''sha512' in browser and node environment and additional 'md4''sha''sha224''sha384' in node only.

所以要保持一致:

import NodeRSA from 'node-rsa';
const rsa_encrypt = (data) => {
let key = new NodeRSA('-----BEGIN PUBLIC KEY-----\n' + 'MIGfMA0。。。。。。。AQAB\n' + '-----END PUBLIC KEY-----');
// key.generateKeyPair(1024);
key.setOptions({encryptionScheme: 'pkcs1'})
let encryptKey = key.encrypt(data, 'base64')
return encryptKey;
}

后台:

    public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey)
throws Exception {
byte[] keyBytes = Base64Utils.decode(privateKey);
PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM);
Key privateK = keyFactory.generatePrivate(pkcs8KeySpec);
Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
cipher.init(Cipher.DECRYPT_MODE, privateK);
int inputLen = encryptedData.length;
ByteArrayOutputStream out = new ByteArrayOutputStream();
int offSet = 0;
byte[] cache;
int i = 0;
// 对数据分段解密
while (inputLen - offSet > 0) {
if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
cache = cipher.doFinal(encryptedData, offSet, MAX_DECRYPT_BLOCK);
} else {
cache = cipher.doFinal(encryptedData, offSet, inputLen - offSet);
}
out.write(cache, 0, cache.length);
i++;
offSet = i * MAX_DECRYPT_BLOCK;
}
byte[] decryptedData = out.toByteArray();
out.close();
return decryptedData;
}

参考:https://blog.csdn.net/mshootingstar/article/details/56496719

最新文章

  1. jQuery代码节选(css)
  2. 软件工程(FZU2015)赛季得分榜,第10回合(alpha冲刺)
  3. ThinkCMF-首页Nav部分菜单配置详解
  4. ios git 终端提交
  5. iOS开发之Objective-C与JavaScript的交互(转载)
  6. 高分辨率 2x图像: -webkit-min-device-pixel-ratio 的常见值对照
  7. Win10环境下的Scrapy结合Tor进行匿名爬取
  8. [转]PLS-S-00201, identifier 'CALLDEMO.GET_EMPLOYEES' must be declared 预编译错误原因及解决办法
  9. 点击UserControl中的按钮将值传给winform页面
  10. Python 3.5 for windows 10 通过pip安装mysqlclient模块 error:C1083
  11. bootstrap之 formgroup表单布局样式
  12. 对简单的正则表达式的理解V1.0
  13. 以程序的方式操纵NTFS的文件权限(陈皓)
  14. C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原
  15. Base64 加解密
  16. node.js学习4--------------------- 根据不同路径来响应内容,以及中文乱码的解决
  17. 修改host文件——mac
  18. java替换字符串中的World为Money
  19. 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理
  20. 第一篇:初识ASP.NET控件开发_第三节:“生死有序”的控件生命周期

热门文章

  1. elasticsearch 安装ik中文分词
  2. Organize Your Train part II 字典树(此题专卡STL)
  3. easyui north 穿透
  4. ETL全量单表同步简述
  5. ppc_85xx-gcc -shared -fPIC liberr.c -o liberr.so
  6. 完整显示当前日期和时间的JS代码
  7. 1.1 Spring概述
  8. Objective-C 内存管理retain和release
  9. 单点登录之CAS简介
  10. JavaScript你所不知道的困惑(1)