我试图在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\u rsa函数,但它不支持x.509或pkcs8(它只是对序列化的模、指数和密钥类型进行base64编码)。然后我尝试了openssl“openssl\u get\u publickey”函数,但它似乎也无法识别该格式。
任何帮助都将不胜感激
4条答案
按热度按时间ggazkfy81#
您还可以尝试使用castlecrypt,它允许在java和php中使用易于使用的rsa加密:https://github.com/wessnerj/castlecrypt
对于密钥生成,您可能希望使用openssl进行尝试:
此命令以der和pem格式提供私钥和公钥。对于java,必须使用.der键;对于php,必须使用.pem键。
3zwjbxry2#
http://code.google.com/p/simplersalibrary/ 是一个简单的工具,如果你想用java加密,用php解密,或者用java加密,用php解密,simplersa还可以为php生成pem文件。
olhwl3o23#
php函数需要pem编码的密钥。把der编码的密钥转换成pem很简单。
这是我把pkcs#8私钥转换成pem的代码,
对于x509中的公钥,在标记中将private替换为public。
uidvcgyl4#
您需要将二进制格式(der)从java转换为openssl的pem(以及php绑定)。通过指定
-inform DER
命令行上的选项。有关在java中使用openssl密钥的更多信息,请查看此链接。