CX509PublicKeyClass初始化因WIN32而失败:13 ERROR_INVALID_DATA

问题描述

我正在尝试使用 InitializefromEncodedPublicKeyInfo(data); 填充CX509PublicKeyClass()对象,其中数据来自我使用ss创建的文件id_rsa.pub( KeyFilePath ) Windows中的-keygen客户端。

我要绑定的示例代码

enter image description here

该图像还显示了正在抛出的异常。 我怀疑问题可能出在预期的编码方式上

public virtual void InitializefromEncodedPublicKeyInfo(string strEncodedPublicKeyInfo,EncodingType Encoding = EncodingType.XCN_CRYPT_STRING_BASE64);

并且我尝试了多种组合,十六进制和base64,认字符串等,但是我仍然看到相同的错误

解决方法

答案在于了解RSA密钥格式

  1. 私有密钥包含:模数,私有指数,公共指数,素数1,素数2,指数1,指数2和系数
  2. 公共密钥仅包含:模数和公共指数。
OpenSSL产生的

PEM格式实际上是base64编码并以称为DER的二进制格式包装密钥数据。因此,要使用PEM格式,您实际上必须使用DER。

DER格式基于抽象语法表示法一(ASN.1)标准。该标准规定了树状数据结构的编码。两个预定义的数据结构用于私有和公共RSA密钥。尽管我找不到适合该格式的很好的解析器,但从标准的注释中我还是写了一个用于对ASN.1值进行编码和解码的类。

PEM格式包含base64编码的DER数据。它还向其中添加了页眉和页脚。以下是私钥的PEM文件的示例。

enter image description here