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

在Android中将PEM转换为PublicKey

汪辰阳
2023-03-14
问题内容

我已经看到了许多类似的问题,但对我而言,没有任何效果。我只是想将从服务器检索到的PEM格式的RSA公钥转换为PublicKeyAndroid中的。谁能指出我正确的方向?

编辑:我已经成功使用以下代码将PEM转换为PublicKey,但是在编码消息后,我得到了意外的输出…

 public PublicKey getFromString(String keystr) throws Exception
    {
        // Remove the first and last lines

        String pubKeyPEM = keystr.replace("-----BEGIN PUBLIC KEY-----\n", "");
        pubKeyPEM = pubKeyPEM.replace("-----END PUBLIC KEY-----", "");

        // Base64 decode the data

        byte [] encoded = Base64.decode(pubKeyPEM);
        X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        PublicKey pubkey = kf.generatePublic(keySpec);

        return pubkey;
    }

    public String RSAEncrypt(final String plain) throws NoSuchAlgorithmException, NoSuchPaddingException,
            InvalidKeyException, IllegalBlockSizeException, BadPaddingException, IOException {

        if (pubKey!=null) {
            cipher = Cipher.getInstance("RSA");
            cipher.init(Cipher.ENCRYPT_MODE, pubKey);
            encryptedBytes = cipher.doFinal(plain.getBytes());
            Log.d("BYTES", new String(encryptedBytes));
            return Hex.encodeHexString(encryptedBytes);
        }
        else
            return null;
    }

输出如下所示:

b6813f8791d67c0fa82890d005c8ff554b57143b752b34784ad271ec01bfaa9a6a31e7ae08444baef1585a6f78f3f848eecb1706bf7b2868fccefc9d728c30480f3aabc9ac5c3a9b4b3c74c2f7d6f0da235234953ea24b644112e04a2ec619f6bf95306ef30563c4608ec4b53ed7c15736d5f79c7fa1e35f2444beb366ae4c71

当我期望更接近:

JfoSJGo1qELUbpzH8d4QXtafup+J2F9wLxHCop00BQ4YS0cRdRCKDfHpFPZQYjNeyQj00HwHbz+vj8haTPbpdqT94AHAl+VZ+TPAiUw1U5EXLLyy4tzbmfVI7CwvMm26lwB4REzYUZdedha1caxMEfxQ5duB+x4ol9eRZM/savg=

我缺少某些格式或文件类型吗?


问题答案:

要回答我自己的问题…第一个输出为十六进制,第二个输出为base64。只需将return语句更改为 return new String(Base64.encode(encryptedBytes)); ,您会很好!



 类似资料:
  • 我一直在尝试使用openssl将.crt证书转换为.pem 无法加载证书 1760:错误:0906D06C:PEM例程:PEM_READ_BIO:没有起始行:.\CRYPTO\PEM\PEM_LIB.C:703:需要:受信任的证书 我尝试过访问https://support.ssl.com/knowledgebase/article/view/19/0/der-vs-crt-vs-cer-vs-p

  • 谁能告诉我从文件中提取/转换证书和私钥文件的正确方法/命令吗?我刚读到它们是可以互换的,但不是怎么互换的。

  • 这个问题更通用,而不是针对特定的语言,所以我将解释我的问题以及我在伪代码中尝试的内容。 我正在尝试从JWK集生成PEM公钥。JWK包括“e”(指数)和“n”(模量)变量。我的问题是,在不使用任何库和OpenSSL命令行工具的情况下,将此JWK转换为PEM的确切步骤是什么。 以下是供参考的 JWK: 我的大部分研究来源于节点jwk到pem库(可以在这里找到:https://github.com/Br

  • 我已经购买了SSL证书,并且从供应商那里收到了证书和作为私钥的. pem文件?现在我需要将此. pem密钥转换为bitnami Redmine Apache Web服务器的. key以使其正常工作。 我该怎么做?什么程序或命令来做?就使用Openssl等实现这一点而言,我是个新手。 任何建议将不胜感激! 谢谢你。

  • 如何生成<代码>。pem使用OpenSSL从PFX文件中获取CA证书和客户端证书。

  • 我在Windows7上有OpenSSL x64,这是我从Google代码上的OpenSSL-for Windows下载的。我正试图跑: 但我有个错误。 如何使用OpenSSL从PKCS#12存储中提取PEM中的证书?