nodejs java rsa_node-rsa加密,java解密调试

用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')returnencryptKey;

}

后台:

public static byte[] decryptByPrivateKey(byte[] encryptedData, String privateKey)throwsException {byte[] keyBytes =Base64Utils.decode(privateKey);

PKCS8EncodedKeySpec pkcs8KeySpec= newPKCS8EncodedKeySpec(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= newByteArrayOutputStream();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();returndecryptedData;

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值