使用php openssl进行加密并使用Java进行解密

时间:2016-06-30 05:55:26

标签: java php encryption cryptography php-openssl

我正在尝试使用php open_ssl加密字符串,然后用Java解密它。我以为我理解发生了什么,但显然不是。

起初我无法让算法匹配。从我可以收集的内容来看,openssl_private_encrypt()正在使用RSA,虽然文档是关于PKCS1_PADDING的,但从我看来,似乎已将其更改为使用PKCS5 / 7变得更加安全。我无法使用RSA / NONE / PKCS5或PKCS7获得任何Java密码。

但是我认为我通过使用NoPadding获得了成功,并且自己填充了这个块。这是使用openssl从DER转换为PEM的现有512位密钥。我有一个

的测试字符串
0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef

我能够在php中读取私钥并使用

加密文本
$fp=fopen("/folder/private_key.pem","r");
$privkey_res=fread($fp,1024);
$privkey = openssl_pkey_get_private($privkey_res); 

$padding = OPENSSL_NO_PADDING;
openssl_private_encrypt($texttocrypt, $encryptedtext, $privkey, $padding);
file_put_contents("/folder/encrypted.txt", $encryptedtext );

然后回到Java中,然后能够使用

正确解密该字符串
Cipher cipherb = Cipher.getInstance("RSA/NONE/NoPadding");
cipherb.init(Cipher.DECRYPT_MODE, publicKey);
decrypted = cipherb.doFinal(text.getBytes());

所以我认为我可以让事情变得有用。然而,然后我稍微改变了测试字符串,就像最后一个'f'到'g'

0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdeg

然后我在解密时得到了完整的垃圾。虽然没有错误。如果我刚刚更改了第一个字符,它仍然可以正确解密。

此时我甚至不确定我不理解的是什么。但有没有办法实现我的最初目标?使用php open_ssl加密并使用Java解密。

由于

0 个答案:

没有答案