我正在尝试在Java和PHP中实现RSA加密,但我似乎无法让PHP识别我的Java公钥/私钥 . 以下是编码/解码公钥和私钥的java代码:
public static byte[] EncodePublicKey(PublicKey _publickey) throws Exception
{
return _publickey.getEncoded();
}
public static PublicKey DecodePublicKey(byte[] _encodedkey) throws Exception
{
KeyFactory fac = KeyFactory.getInstance("RSA");
X509EncodedKeySpec encodedKey = new X509EncodedKeySpec(_encodedkey);
return fac.generatePublic(encodedKey);
}
public static byte[] EncodePrivateKey(PrivateKey _privatekey) throws Exception
{
return _privatekey.getEncoded();
}
public static PrivateKey DecodePrivateKey(byte[] _encodedkey) throws Exception
{
KeyFactory fac = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec encodedKey = new PKCS8EncodedKeySpec(_encodedkey);
return fac.generatePrivate(encodedKey);
}
我首先尝试使用PEAR Crypt_RSA函数,但它不支持X.509或PKCS8(它只是简单的base64编码序列化模数,指数和键类型) . 然后我尝试了OpenSSL“openssl_get_publickey”函数,但它似乎也没有识别格式 .
任何帮助将非常感谢o.O
4 回答
您还可以尝试使用CastleCrypt,它允许在JAVA和PHP中使用易于使用的RSA加密:https://github.com/wessnerj/CastleCrypt
对于密钥生成,您可能希望使用openssl进行尝试:
此命令为DER和PEM格式提供私钥和公钥 . 对于JAVA,您必须使用.der键和PHP .pem键 .
您需要将二进制格式(DER)从Java转换为PEM以用于OpenSSL(以及PHP绑定) . 您可以通过在命令行上指定
-inform DER
选项,使用OpenSSL命令行测试Java密钥文件 .有关在Java中使用OpenSSL密钥的更多信息,check out this link .
PHP函数需要PEM编码密钥 . 将DER编码密钥转换为PEM是微不足道的 .
这是我将PKCS#8私钥转换为PEM的代码,
对于X509中的公钥,请在标记中将PRIVATE替换为PUBLIC .
http://code.google.com/p/simplersalibrary/是一个简单的工具,如果你想用Java加密东西并用PHP解密或用java加密并用PHP解密,simplersa也可以为PHP生成pem文件 .