为了账号安全,请及时绑定邮箱和手机立即绑定

RSACng 和 CngKeyBlobFormat 导入导出格式

RSACng 和 CngKeyBlobFormat 导入导出格式

C#
海绵宝宝撒 2021-10-31 19:02:00
我在 pem 文件中有一个 ASN.1 编码的 RSA 私钥,格式如下:-----BEGIN RSA PRIVATE KEY----- base64 encoded pkcs8 key -----END RSA PRIVATE KEY-----现在,要将其导入到我的RSACng对象中,我需要执行以下步骤:读取文件并提取编码的密钥转换base64为字节以获取byte[]for pkcs8 密钥将byte[]ASN.1 (DER)解码为关键信息(模数、指数等)将这些参数加载到RSACng对象中我有以下两个问题:1.为什么 CngKeyBlobFormat.Pkcs8PrivateBlob 不允许你自动将PKCS8 byte[] 密钥导入 RSACng 对象?例如,为什么它不能以这种方式工作:var keyData = GetBytesFromPEM(pemstring); // Get the bytes for key that is ASN.1 DER encoded CngKey cngKey = CngKey.Import(keyData, CngKeyBlobFormat.Pkcs8PrivateBlob);CngKeyBlobFormat 明确指定它是一个 PKCS8 私有 blob。2. 的ASN.1编码格式是 RSACng.Key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob)什么?我注意到,如果我RSACng按照上面描述的那样将密钥加载到 中,然后使用上面的代码导出相同的密钥,我会得到以不同 ASN.1 格式编码的 BLOB,并且在它的 INSIDE 中包含 ASN.1 DER 编码的密钥。基本上,要从这个导出的密钥中获取信息,我需要再次从这个 ASN.1 格式解码它,以获取存储在其中的原始密钥参数,这些参数再次以 ASN.1 DER 编码。为什么会这么乱?并且是您不能将 ASN.1 DER 编码的密钥导入RSACng到CngKeyBlobFormat.Pkcs8PrivateBlob具有不同 ASN.1 编码格式并且它不是 DER 的原因吗?潜在的解决方法是将原始 RSA 私钥编码为另一种 ASN.1 格式,因为这正是导出密钥的方式?编辑:显然,RSACng.Key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob)使用对象标识符(我还不熟悉),但它似乎仍然是 DER 格式
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 310 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信