【问题标题】:RSA key convert to PEM fileRSA 密钥转换为 PEM 文件
【发布时间】:2010-12-19 21:00:14
【问题描述】:

如何转换此 RSA 公钥: 109120132967399429278860960508995541528237502902798129123468757937266291492576446330739696001110 6039072308886100726558188253585034290 57592827629436413108566029093628 2126359538366865626758497206207862794310902180176810615217550567108238764764442605581471797071 19674283982419152118103759076030616683978566631413 P>

到 *.pem 文件?

【问题讨论】:

标签: cryptography key rsa


【解决方案1】:

“pem”文件并不是真正的格式,不同类型的对象可能存储在称为“pem”文件的东西中。大多数情况下,这些文件包含 base64 编码的 X509 证书或 base64 编码的私钥对象。

假设您需要 X509 证书,接下来您应该意识到证书包含许多字段,其中只有一个是公钥。因此需要决定其他字段的值。最后,必须使用私钥签署证书。

附言。一个 RSA 公钥由一个模数一个公共指数组成。你的公开指数是多少?

【讨论】:

    【解决方案2】:

    如果您的十六进制字符串只是从 base64 到十六进制的简单转换。然后你可以扭转它。这是我为解决我的问题所做的脚本(在 PHP 中):

    <?php
    
    $list = array_slice($argv, 1);
    
    foreach ($list as $file) {
        $hex = str_replace("\n", "", file_get_contents($file));
        $pem = str_replace(".hex", ".pem", $file);
        $b64 = base64_encode(hex2bin($hex));
        $fd = fopen($pem, 'w');
        fprintf($fd, "-----BEGIN PUBLIC KEY-----\n%s\n-----END PUBLIC KEY----\n", implode("\n", str_split($b64, 64)));
        fclose($fd);
    }
    

    给定一个 .hex 文件列表,它会转换回“.pem”。你可以这样运行它:

    php script.php *.hex
    

    【讨论】:

      【解决方案3】:

      我会使用 OpenSSL。假设您有 DER 格式的密钥,您可以使用此命令将 DER 转换为 PEM。

      openssl x509 -inform der -in input.der -out output.pem
      

      如果您不确定您是否拥有格式正确的 DER (ASN.1) 编码密钥,请尝试使用此 tool 来解析您的输入文件。

      【讨论】:

        【解决方案4】:

        首先President James K. Polk 是对的。完整的 RSA 密钥由模数和公共指数组成。 在 Java 中,java.security.interfaces 包中的接口 RSAPublicKey 可以保存格式良好的 RSA 密钥。假设您有这样的对象,转换为 PEM 格式的过程将涉及对其进行编码,如下所示:

        String pemFormatKey = Base64.getEncoder().encodeToString(rsaPublicKey.getEncoded());
        

        【讨论】:

          【解决方案5】:

          使用putty 程序,PuTTYgen 进行此转换

          【讨论】:

          • 您能再解释一下吗?如何加载这个现有的?现在将其保存到 pem 中?
          • 对不起,我很久以前就做过了,但看起来 puttygen 做的事情和你需要的不一样,请试试这个答案stackoverflow.com/questions/884207/…
          猜你喜欢
          • 2011-03-06
          • 1970-01-01
          • 2010-11-03
          • 1970-01-01
          • 2014-02-06
          • 1970-01-01
          • 1970-01-01
          • 2017-05-11
          相关资源
          最近更新 更多