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