Text 如何将私钥的十六进制表示形式转换为支持OpenSSL的格式(PEM/DER/?)

Text 如何将私钥的十六进制表示形式转换为支持OpenSSL的格式(PEM/DER/?),text,format,openssl,pem,Text,Format,Openssl,Pem,标题基本上说明了一切 我有一个表示私钥的十六进制字符串,为了能够与OpenSSL一起使用,我需要能够将其转换为OpenSSL支持的某种格式,无论是PEM还是其他格式 我知道人们可以读取PEM格式的密钥,然后以如下格式打印出来: Private-Key: (1024 bit) modulus: 01:02:03:04.. publicExponent: 65537 (0x10001) privateExponent: 01:02:03:04.. prime1: 01

标题基本上说明了一切

我有一个表示私钥的十六进制字符串,为了能够与OpenSSL一起使用,我需要能够将其转换为OpenSSL支持的某种格式,无论是PEM还是其他格式

我知道人们可以读取PEM格式的密钥,然后以如下格式打印出来:

    Private-Key: (1024 bit)
modulus:
    01:02:03:04..
publicExponent: 65537 (0x10001)
privateExponent:
    01:02:03:04..
prime1:
    01:02:03:04..
prime2:
    01:02:03:04..
exponent1:
    01:02:03:04..
exponent2:
    01:02:03:04..
coefficient:
    01:02:03:04..

但是我找不到任何将密钥从这种格式转换为PEM格式的信息。我真的会被迫这样做并编写自己的转换器吗

我没有这样尝试过,但您可能想看看Bouncy Castle API,从这里开始:

看起来您可以设置私钥的各个部分,然后使用它们的API将其保存为标准格式


他们有一个Java和.NET API可用。

事实上,我自己找到了一个解决方案

为此,将上述格式拆分为8个十六进制字符串

在此之后,您只需从磁盘或其他地方读取密钥,然后使用BN_hex2bn()函数填充RSA结构。填充后,可以使用PEM_write_rsaprovatekey将其写入磁盘


我知道答案不是很详细,但是如果你操作这些函数(你是另外一个遇到这个问题的人),一切都会很清楚

当你说你有一个十六进制的字符串代表一个键,那到底是什么意思?十六进制字符串编码字节字符串,但字节字符串本身必须具有格式。那么底层数据的格式是什么呢?OpenSSL命令行工具非常擅长在格式之间进行转换,因此您可以使用这些工具进行转换。