繁体   English   中英

如何将私钥从十六进制转换为PrivateKey对象?

[英]How do I convert a private key from hexadecimal to a PrivateKey object?

我为我的私钥生成了以下关键字符串:

""

如何将其转换回Java中的私钥对象? 我已经尝试将此字符串转换回字节数组,但我对如何继续这一点毫无头绪。

这是我将私钥转换为十六进制字符串的方式:

public static String getHexString(byte[] b){
  String result = "";
  for (int i = 0; i < b.length; i++){
    result += Integer.toString((b[i] & 0xff) + 0x100, 16).substring(1);
   }
   return result;
 }

然后我在我的私钥上使用getEncoded()方法作为此方法的输入。

当您在RSA私钥上调用getEncoded()时,大多数提供程序将返回PKCS#8格式的私钥。 您的示例就是这种情况。

要反转该过程,请使用带有PKCS8EncodedKeySpecKeyFactory ,如下所示:

String key = "30820278020...1608"; // omitted for brevity

byte[] keyData = DatatypeConverter.parseHexBinary(key);
KeyFactory factory = KeyFactory.getInstance("RSA");
RSAPrivateKey privateKey = (RSAPrivateKey) factory
    .generatePrivate(new PKCS8EncodedKeySpec(keyData));

Signature signature = Signature.getInstance("SHA512withRSA");
signature.initSign(privateKey);
signature.update("Hello, World".getBytes());
System.out.println(DatatypeConverter.printHexBinary(signature.sign()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM