【发布时间】:2011-05-25 12:15:39
【问题描述】:
我一直在努力阅读一个公钥文件,我想在文件中获取密钥字符串并使用它来加密另一个文件。我正在使用 RSA PKCS1 v1.5 使用 SH1 散列算法对文件进行加密和签名,但这不是问题,问题是我已经获得了要在加密时使用的公钥文件,我似乎无法通过阅读获胜文件并生成一个 publicKey 对象。
代码如下:
void setPublicKey(String file)
{
try
{
FileInputStream keyfis = new FileInputStream(file);
byte[] encKey = new byte[keyfis.available()]; keyfis.read(encKey);
keyfis.close();
X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(encKey);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
// I get an exception on the below line
publicKey = keyFactory.generatePublic(pubKeySpec);
} catch (Exception e)
{
e.printStackTrace();
}
}
有人可以帮忙吗!
【问题讨论】:
-
您确定文件末尾没有换行符,对吧?由于您正在将整个文件读入字节数组,因此您需要注意这一点。
-
如何检查?顺便说一句,我得到的异常是 InvalidKeySpecException : InvalidKeyException :Invalid Key Format.
-
好吧,鉴于您正在读取整个文件内容作为您的密钥,换行符肯定会搞砸事情。既然已经安全地消除了,你能提供一个堆栈跟踪吗?仅仅知道代码失败并不足以诊断您的问题。
-
这里是堆栈跟踪:java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:在 java.security 的 sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source) 处的密钥格式无效。 KeyFactory.generatePublic(Unknown Source) at Trunk.Main.setPublicKey(Main.java:422) “这是我设置公钥的地方,如代码片段中所述”,位于 Trunk.Main.Encryption(Main.java:282) Trunk.Main.main(Main.java:92)
标签: java encryption public-key