使用公钥时出现 InvalidKeySpecException

2024-05-29

我正在拼命尝试在 Android 上使用非对称公钥/私钥加密技术来加密消息。

我在 Windows 上,使用 puttygen 生成了公钥和私钥。我不确定它有什么区别,但我选择了 SSH-2 RSA。这是公钥:

AAAAB3NzaC1yc2EAAAABJQAAAQEAh63orUzl0UTd7jj0KNYJg1+kNnty0QHyJu0r
Cajf5Kl7qWJaGXPfwsG8Qt3teafs5sv0JBSinab0s/5wfQmd1QPpXTMP93Wc4ucp
1VC/9B2o8XVi4fKoGTehB48yrSfI6KF2AIeASM1jUswydKxsuS4AS2mLGV/HuoKD
huMfCsRc8qK5zGQfVCoZTbQ66Z1yKdAzxMUuGmiTp7pVsle/P/UGbm6yFiee5r1/
dOR2CDyR6CP09Jaj7KSGfGuwPryCXPjEce1oCbN/FlLHVb7T1B5f6xhq+oY+Ij13
1IZPfShV8cs2kYKjsle2s23V5urSdWFv2tEcSJcpkUm2FlPdQw==

我已将其复制到我的 main/assets 文件夹中的文本文件中。我是这样读的:

InputStream input = context.getAssets().open(filename);

然后通过相当标准的 ByteArrayOutputStream 方法将其读入字节数组。

然后我尝试将其转换为公钥,如下所示:

public static PublicKey getPublicKey(byte[] keyBytes){
    PublicKey publicKey = null;

    if(keyBytes != null) {

        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
        KeyFactory kf = null;
        try {
            kf = KeyFactory.getInstance("RSA");
            publicKey = kf.generatePublic(spec);
        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG, "NoSuchAlgorithmException");
            e.printStackTrace();
        } catch (InvalidKeySpecException e) {
            Log.e(TAG, "InvalidKeySpecException " + e.getMessage());
            e.printStackTrace();
        }
    }

    return publicKey;
}

问题是我不断收到此错误:

InvalidKeySpecException java.lang.RuntimeException: error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag

我已经攻击这个问题好几个小时了,似乎无法绕过它。欢迎提出任何建议。

我已经尝试过 Base64 这样的:

byte[] tempNewKey = Base64.decode(keyBytes, Base64.DEFAULT);

这没有什么区别,我也尝试过使用

RSAPublicKeySpec pubKeySpec = new RSAPublicKeySpec(new BigInteger(module), new BigInteger(exponent));

但是 Putty 没有告诉我任何关于指数的信息?如果我继续使用这种方法,我不会得到相同的错误,但如果我尝试用我的私钥解密,我只会得到乱码。

真心希望你能帮忙。非常感谢


SSH 密钥不是 X509 兼容密钥。它们以 SSH 专有格式存储。您需要一个支持 SSH 的库来检索密钥值。

如果不需要 SSH 功能,则可以在 Java 中生成密钥(使用keytool命令行或KeyPairGenerator.

或者,也可以使用外部应用程序或库,例如openssl命令行。对于 OpenSSL,指定 DER 作为输出。 Java 需要 DER 编码SubjectPublicKeyInfo结构为X509EncodedKeySpec.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用公钥时出现 InvalidKeySpecException 的相关文章

随机推荐

  • 获取“android:label”属性时出错:属性不是字符串值

    尝试将我的应用程序发布到 android 市场时 出现此错误 获取 android label 属性时出错 属性不是字符串值 不久前 这个应用程序已经在市场上成功发布 但是当我在 AndroidManifest xml 中应用微小的更改 更
  • 我如何浏览 json?

    我有一些在对象中的 JSON 但我似乎可以返回 json 示例的值 如下所示 rootLayout main layoutDescriptions id main container type Tabs content type Panel
  • 如何使图像大小适合 JFrame 大小?

    我有一个JPanel into a JFrame 我在上面加载了一张图片JPanel但它只显示了图片的一部分 这是我执行此操作的代码部分 JPanel panelImg new JPanel public void paintCompone
  • Spring MVC http 500错误apache

    上面是我的程序的目录层次结构 我是 Spring 新手 正在学习 MVC 概念 我编写了一个程序 它将输入 名称 输入文本框并打印 Hello name 以下是我的目录结构和我创建的各种文件 web xml
  • 更新期间唯一索引违规

    我在更大的数据库中遇到了唯一索引违规 最初的问题发生在存储的 pl pgsql 函数中 我已经简化了一切以显示我的问题 我可以在一个相当简单的表格中重现它 CREATE TABLE public test id integer NOT NU
  • 在html页面中使用jquery显示json数据

  • 如何在 MonkeyRunner 中捕获 SocketException?

    使用 MonkeyRunner 时 我经常会收到如下错误 120830 18 39 32 755 S MainThread com android chimpchat adb AdbChimpDevice Unable to get var
  • 如何使用 CSS 使文本区域居中?

    请原谅我问这么简单的问题 我对 HTML 和 CSS 都很陌生 有没有一种简单的方法可以使文本区域居中 我想我只是尝试使用 textarea margin left auto margin right auto 但它 显然 不起作用 边距不
  • 如何将 nartc/automapper 中的配置文件使用到 Nestjs 应用程序中

    我正在尝试在 NestJS 项目内的 nartc automapper lib 中使用 AutoMapper for nodejs 但是在尝试使用配置文件功能时遇到了麻烦 这是我的配置 应用程序模块 Module imports Autom
  • 用户如何在winforms运行时调整控件大小

    假设我有一个图片框 现在我想要的是用户应该能够随意调整图片框的大小 但是我不知道如何开始做这件事 我搜索过互联网 但信息很少 有人至少可以指导我从哪里开始吗 这很容易做到 Windows 中的每个窗口都具有与生俱来的可调整大小的能力 它刚刚
  • 使用 useState 更新状态时功能组件不更新 DOM

    EDIT 代码笔在这里https codepen io mark kelly the looper pen abGBwzv https codepen io mark kelly the looper pen abGBwzv 我有一个显示
  • Git 与人工制品

    刚刚完成 NPM 和 Bower 的 Artifactory 设置 它非常容易使用 您只需更改存储库 URL 一切就正常了 查看有关如何让 Artifactory 与 github vcs 一起使用的文档 它看起来过于复杂 我想知道是否有人
  • Oauth 2:access_token 是用户的唯一密钥吗?

    一个用户之后与 Facebook 连接 https developers facebook com docs authentication Facebook 回应access token 我可以假设这个吗access token将始终保持不
  • 使用 ui-router 的 angular.js,如何仅重新加载一个视图?

    我有一个相当简单的待办事项应用程序 使用 angular js 我正在使用 ui router 库 我查看了 github 上的 ui router 示例 https github com angular ui ui router tree
  • 如何从嵌套字典中获取键?

    我在字典中的字典中有一个列表 FirmA ProductA Color1 Color2 Color3 我想构建第一公司字典级别的键列表 然后 我需要根据公司密钥访问第二级产品字典 最后 我需要根据字典级别 2 产品 中的产品密钥访问颜色列表
  • 如何查找所有mysql表之间的所有关系?

    如何找到MySQL所有表之间的所有关系 例如 如果我想知道大约有 100 个表的数据库中表的关系 有什么办法知道这个吗 从编程角度来说 更好的方法是从以下位置收集数据 INFORMATION SCHEMA KEY COLUMN USAGE表
  • 我应该将哪个 STL 容器用于 FIFO?

    哪种 STL 容器最适合我的需求 我基本上有一个 10 个元素宽的容器 我在其中不断地push back新元素的同时pop front计算最旧的元素 大约一百万次 我目前正在使用std deque对于这项任务 但想知道是否std list会
  • Node WebKit 和 YouTube:chrome 未定义

    我正在开发一个应用程序Android iOS Mac OS and Windows using PhoneGap and Node WebKit 该应用程序已嵌入youtube videos These youtube视频在我的中运行良好M
  • 使用 flex 将项目与底部对齐

    我正在尝试使用 flex 将父级内部的项目与父级底部对齐 但由于某种原因它不起作用 我究竟做错了什么 login border 1px solid red height 50px display flex login border radi
  • 使用公钥时出现 InvalidKeySpecException

    我正在拼命尝试在 Android 上使用非对称公钥 私钥加密技术来加密消息 我在 Windows 上 使用 puttygen 生成了公钥和私钥 我不确定它有什么区别 但我选择了 SSH 2 RSA 这是公钥 AAAAB3NzaC1yc2EA