PHP 和 JAVA 进行RSA加密时候不一致问题

用PHP跟JAVA进行一项接口对接过程中,其中有一项是对字符串进行RSA的加密操作,但是用同样的密钥进行加密后,结果不一致导致无法继续进行,下面贴出代码,还请各位大神指点:

JAVA相关代码如下:

protected byte[] encryptWithPrivateKey(byte[] raw) throws Exception {

Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1PADDING", "BC");

cipher.init(1, this.priKey);

byte[] dataReturn = null;

for(int offset = 0; offset < raw.length; offset += 245) {

byte[] b = cipher.doFinal(ArrayUtils.subarray(raw, offset, offset + 245));

dataReturn = ArrayUtils.addAll(dataReturn, b);

}

return dataReturn;

}

PHP则是通过openssl扩展进行加密,代码如下:

        $r = openssl_private_encrypt($data, $encrypted, $privKey);

if ($r) {

return base64_encode($encrypted);

}

经过多次测试,借助网上的在线RSA加密工具比对,处理结果均和PHP的结果一致,始终得不到JAVA的处理结果,不知道JAVA这一段处理方式和常规RSA有什么异同,由于本人不懂JAVA,确实不知道如何实现,希望得到大神指点……


回答:

你们 Java 这写的确定对么……

PHP 和 JAVA 进行RSA加密时候不一致问题

就算你不懂 Java,但基本的 for 循环语法应该能看明白吧?

这里 raw 是原始数据的二进制数组,但循环每次 +245;那么问题来了,它怎么确保 raw 的长度是 245 的倍数的?如果不是整数倍,那一定有一部分结尾的数据被丢掉了啊……

别的细节还没看,但这里问题是最大的。

另外看起来你们 Java 是分块加密的;那你在 PHP 里也要分块解密。


回答:

245这个, 你确定一下密钥长度是2048位么? rsa分组长度是 密钥长度/8-11 , 不是固定的245

以上是 PHP 和 JAVA 进行RSA加密时候不一致问题 的全部内容, 来源链接: utcz.com/p/938099.html

回到顶部