sdk - CX509PublicKeyClass 初始化因 WIN32 失败:13 ERROR_INVALID_DATA
问题描述
我正在尝试使用InitializeFromEncodedPublicKeyInfo(data); 填充 CX509PublicKeyClass() 对象;其中数据来自我在 Windows 中使用 ss-keygen 客户端创建的文件 id_rsa.pub ( KeyFilePath )。
该图像还显示了正在引发的异常。我怀疑问题可能与预期的编码有关
public virtual void InitializeFromEncodedPublicKeyInfo(string strEncodedPublicKeyInfo, EncodingType Encoding = EncodingType.XCN_CRYPT_STRING_BASE64);
我已经尝试了多种组合, Hex 和 base64 ,默认字符串等,但我仍然看到同样的错误。
解决方案
答案在于理解 RSA 密钥格式
- 私钥包含:模数、私有指数、公共指数、素数1、素数2、指数1、指数2和系数
- 公钥包含:只有模数和公共指数。
OpenSSL 产生的 PEM 格式实际上是以称为 DER 的二进制格式进行 base64 编码和包装的密钥数据。因此,要使用 PEM 格式,您必须实际使用 DER。
DER 格式基于抽象语法符号一 (ASN.1) 标准。该标准规定了树状数据结构的编码。两个预定义的数据结构用于私有和公共 RSA 密钥。虽然我没有找到一个很好的格式解析器,但我手头有一些标准的注释,我编写了一个用于编码和解码 ASN.1 值的类。
PEM 格式包含 base64 编码的 DER 数据。它还为其添加了页眉和页脚。以下是私钥的 PEM 文件示例。
推荐阅读
- html - ESP32 上自动驾驶汽车的 HTML 界面
- javascript - 移动内容时的 Vue 过渡
- emacs - (厄运)emacs:lsp-mode 在 sbt-start 上找不到项目根目录
- c# - 实体框架代码优先 - 在域模型上使用接口
- php - 如何让合适的人访问此功能?
- javascript - ajax 或 jquery 不显示数据 Laravel
- python - django:当文件不存在时重定向后意外的文件下载
- masm - masm mov mybyte, -130 为什么这样有效?
- c - C:在结构中初始化指针时出现分段错误
- django - Django Model DateField 和输入夹具