【发布时间】:2013-11-17 16:02:33
【问题描述】:
我有一个奇怪的错误,我找不到解决办法。
所以我生成了一个公钥-私钥对,将其转换为字节数组,然后从数组中恢复原始密钥。没有错误
{
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
PublicKey pub = keyPair.getPublic();
byte[] pubBytes = pub.getEncoded();
try
{
// to recover the key
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey pub_recovered = kf.generatePublic(new X509EncodedKeySpec(pubBytes));
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
System.out.println("Finish");
之后我重复相同的步骤,但在恢复密钥之前,我将字节数组转换为字符串,然后再返回。在这种情况下,我会出错。
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
KeyPair keyPair = kpg.generateKeyPair();
PublicKey pub = keyPair.getPublic();
byte[] pubBytes = pub.getEncoded();
try
{
String pub1 = new String(pubBytes, "UTF-8");
byte[] pub2 = pub1.getBytes("UTF-8");
// to recover the key
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey pub_recovered = kf.generatePublic(new X509EncodedKeySpec(pub2));
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
错误发生在一行:
PublicKey pub_recovered = kf.generatePublic(new X509EncodedKeySpec(pub2));
它说:
java.security.InvalidKeyException: IOException: DerInputStream.getLength(): lengthTag=111, too big.
有谁知道如何解决以及为什么会发生这种情况?该消息说无效密钥异常,但是由于它在第一种情况下起作用,我更倾向于在字节转换期间发生错误。完全没有意义。
【问题讨论】:
-
String pub1 = new String(pubBytes, "UTF-8");是没有意义的。
标签: java utf-8 bytearray public-key typeconverter