Cryptography RSA密钥转换为PEM文件

Cryptography RSA密钥转换为PEM文件,cryptography,key,rsa,Cryptography,Key,Rsa,如何转换此RSA公钥: 10912013296739942927886050899554152823750290279812912346875793726629149257644633073696001110 60390723088861007265581882535855034290 57592827627629436413108566029093628 2126359538386865626759720762794310768180615217550561082387664442605581

如何转换此RSA公钥: 10912013296739942927886050899554152823750290279812912346875793726629149257644633073696001110 60390723088861007265581882535855034290 57592827627629436413108566029093628 2126359538386865626759720762794310768180615217550561082387664442605581471797071 1967428398241521187576016687856413

为了*.pem文件?

使用程序,PuTTYgen进行此转换

一个“pem”文件实际上不是一种格式,不同类型的对象可能存储在称为“pem”文件的东西中。这些文件通常包含base64编码的X509证书或base64编码的私钥对象

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


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

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

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

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

如果您的十六进制字符串只是从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);
}
首先是正确的。一个完整的RSA密钥由一个模和一个公共指数组成。 在Java中,包Java.security.interfaces中的接口RSAPublicKey可以保存格式良好的RSA密钥。假设您有这样的对象,转换为PEM格式的过程将涉及对其进行编码,如下所示:

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

你能再解释一下吗?如何加载此现有文件?现在把它保存到pem?很抱歉,我很久以前就这么做了,但看起来puttygen做了不同的事情,然后你需要,请尝试这个答案看到这个吗
String pemFormatKey = Base64.getEncoder().encodeToString(rsaPublicKey.getEncoded());