当前位置: 首页 > 面试题库 >

Algid解析错误,而不是序列

司寇嘉茂
2023-03-14
问题内容

尝试使用方法从文件中读取RSA私钥时

public PrivateKey getPrivateKey()
        throws NoSuchAlgorithmException,
        InvalidKeySpecException, IOException {

    final InputStream inputStream = getClass().getClassLoader()
                    .getResourceAsStream("privatekey");
    byte[] privKeyBytes = null;
    try {
        privKeyBytes = IOUtils.toByteArray(inputStream);
    } catch (final IOException exception) {
        LOGGER.error("", exception);
        IOUtils.closeQuietly(inputStream);
    }

    LOGGER.debug("privKeyBytes: {}", privKeyBytes);

    String BEGIN = "-----BEGIN RSA PRIVATE KEY-----";
    String END = "-----END RSA PRIVATE KEY-----";
    String str = new String(privKeyBytes);
    if (str.contains(BEGIN) && str.contains(END)) {
        str = str.substring(BEGIN.length(), str.lastIndexOf(END));
    }

    KeyFactory fac = KeyFactory.getInstance("RSA");
    EncodedKeySpec privKeySpec =
            new PKCS8EncodedKeySpec(Base64.decode(str.getBytes()));
    return fac.generatePrivate(privKeySpec);
}

我例外

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence
    at sun.security.rsa.RSAKeyFactory.engineGeneratePrivate(RSAKeyFactory.java:200) ~[na:1.6.0_23]
    at java.security.KeyFactory.generatePrivate(KeyFactory.java:342) ~[na:1.6.0_23]

在fac.generatePrivate(privKeySpec)调用中。

这个错误是什么意思?

谢谢

德米特里


问题答案:

这意味着您的密钥不是PKCS#8格式。最简单的方法是使用openssl pkcs8 -topk8 <...other options...>命令一次转换密钥。或者,您可以使用Bouncycastle轻量级API的PEMReader类。



 类似资料:
  • 问题内容: 我正在尝试将用ssl生成的RSA私钥加载到Java中,我的代码是: 生成密钥 : 结果: 加载: 并抛出一个。错误在哪里? 问题答案: 如果需要,您仍然可以加载密钥, 您所需要的只是模数和指数。

  • 问题内容: 我有一个用PHP编写的页面。我无权访问服务器。我想这样做,而不是在PHP遇到错误时显示错误消息,而是给出500。 问题答案: 如果display_errors关闭,PHP 5.2默认会发送致命错误的HTTP 500。如果托管使用较旧的PHP,则必须注册自己的错误处理程序以及可能的异常处理程序,然后将用户重定向到您的500错误页面。尝试按照@Umang的建议在PHP脚本中设置displa

  • 问题内容: 我正在尝试解析包含一个城市的大型json文件(以下是文件中的前两个城市): 我想获取其“名称”值与字符串匹配的城市的ID: 但是,出现以下错误: 然后冒号后,它吐出了整个文件。 问题答案: 改成 因为它在顶层包含一个数组

  • 给出以下步骤列表 当endpoint返回HTTP 200(这是一个错误,我需要修复),但无效的json响应,如 将引发此异常 我希望看到测试失败,因为收到预期404的错误状态代码200。我想知道在空手道中抛出这个异常是否正确? 谢谢

  • 问题内容: 我正在使用Handlebars模板,并且[Object object]中已经表示了JSON数据,如何在Handlebars之外解析此数据?例如,我试图通过handlebars标签在页面上填充一个JavaScript变量,但这不起作用。 有什么建议?谢谢! 编辑: 为了澄清起见,我使用的是带有手把的ExpressJS模板。在我的路线中,我有这个: 然后在index.hbs模板中,我有了一

  • 问题内容: 我正在使用 其中的字符串是格式。 例如,如果是40/02/2013,我将获得一个错误,而parse方法将返回Date 2013年3月12日(12/03/2013)。我在抱怨什么? 问题答案: 设置宽大处理位: 指定日期/时间解析是否宽松。使用宽大的解析,解析器可以使用试探法来解释与该对象的格式不完全匹配的输入。在严格分析的情况下,输入必须与该对象的格式匹配。 如下代码: 给出: 笔记