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,确实不知道如何实现,希望得到大神指点……

阅读 4.3k
2 个回答

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

image.png

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题