假设我有以下的Java代码来生成公私密钥对:RSA加密,解密PHP
KeyPairGenerator generator = KeyPairGenerator.getInstance ("RSA");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
generator.initialize (1024, random);
KeyPair pair = generator.generateKeyPair();
RSAPrivateKey priv = (RSAPrivateKey)pair.getPrivate();
RSAPublicKey pub = (RSAPublicKey)pair.getPublic();
// Sign a message
Signature dsa = Signature.getInstance("SHA1withRSA");
dsa.initSign (priv);
dsa.update ("Hello, World".getBytes(), 0, "Hello, World".length());
byte[] out = dsa.sign();
/* save the signature in a file */
FileOutputStream sigfos = new FileOutputStream("sig");
sigfos.write(out);
sigfos.close();
一个人怎么会去和PHP解密文件“SIG”?我读过帖子:https://stackoverflow.com/a/1662887/414414,它提供了一个函数来将DER
文件转换为PEM
(假设我也从Java保存公钥)。
我已经试过类似:
$key = openssl_pkey_get_public ("file://pub_key.pem");
$data = null;
openssl_public_decrypt (file_get_contents ("sig"), $data, $key);
echo $data, "\n";
它成功地解密消息,但它是许多奇怪的字符。
我们的场景是一个Java客户端发送消息到PHP服务器,但用私钥加密数据。 PHP知道它应该用来解密和验证消息的公钥。
我已经阅读了很多关于这个问题的帖子,所以我已经意识到这是一个有点特定的问题,尤其是如果有不同的算法在使用等等。所以对不起,如果这可能是一个副本。
任何反馈都非常感谢!
“它成功解密了邮件,但它是很多奇怪的字符。” - 你能更具体一点吗?难道它只是一个编码问题? – 2013-03-14 14:18:56
解码后的消息是否与原始文本类似,还是完全乱码? – 2013-03-14 14:19:27
你想验证Java和PHP之间发送的消息,还是加密它们?或两者? – 2013-03-14 16:34:41