【问题标题】:java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: Detect premature EOFjava.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:IOException:检测过早的EOF
【发布时间】:2013-12-14 17:39:26
【问题描述】:

我有这个代码:

// Turn the encoded key into a real RSA public key.
// Public keys are encoded in X.509.
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);

错误:

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: 检测过早的 EOF

问题出在哪里?

【问题讨论】:

  • 你从哪里得到keyBytes
  • 从此代码: File f = new File("C:/Users/Joe/Desktop/joesaab.txt"); try{ FileInputStream fis = new FileInputStream(f); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int theByte = 0; while ((theByte = fis.read()) != -1) { baos.write(theByte); } fis.close(); byte[] keyBytes = baos.toByteArray(); baos.close(); System.out.println("pub 和 priv 完成.. 编码开始!");
  • 文件是否存在?您是否正确拼写了它的路径和名称? keyBytes的内容是什么?看起来合理吗?或者它只是一个空字符串或什么?你在哪里捕捉到来自try 块的异常,它捕捉到了什么有趣的东西吗?
  • 文件和路径正确且存在,在我的代码中我需要使用 RSA 加密文本文件。我认为问题出在 keyspecs 中。
  • 文件joesaab.txt是什么?是要加密的文本还是密钥? (Java 认为你想用它作为键。)

标签: public-key-encryption x509


【解决方案1】:
public static PublicKey getPublicKey(String key) throws Exception {
      byte[] keyBytes;  
      keyBytes = (new BASE64Decoder()).decodeBuffer(key); 
      X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes); 
      KeyFactory keyFactory = KeyFactory.getInstance("RSA");
      PublicKey publicKey = keyFactory.generatePublic(keySpec); 
      return publicKey;
  }

这就是我将“字符串密钥”转换为真正的 RSA 密钥(PublicKey publicKey)的方式。 也许有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2012-01-03
    相关资源
    最近更新 更多