PEM 编码 public 密钥格式

PEM Encoded public key format

我有以下 public 密钥,它们应该是相同的,只是编码方式不同。

-----BEGIN PUBLIC KEY-----
MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAE+jkeOL+r/kTmmTUAPs9zk+PX0MydMmz3
WYUtE1qVO7KPIm4XfwbxTkRKZvkA4uOeumn+CVeBT8fV1jaWw2obbg==
-----END PUBLIC KEY-----


-----BEGIN PUBLIC KEY-----
MIIBMzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA////////////////
/////////////////////v///C8wRAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBEEEeb5m
fvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio/Re0
SKaFVBmcR9CP+xDUuAIhAP////////////////////66rtzmr0igO7/SXozQNkFB
AgEBA0IABPo5Hji/q/5E5pk1AD7Pc5Pj19DMnTJs91mFLRNalTuyjyJuF38G8U5E
Smb5AOLjnrpp/glXgU/H1dY2lsNqG24=
-----END PUBLIC KEY-----

任何人都可以告诉我每种格式的名称是什么,以及是否有任何方法可以在 .net 中在两者之间进行转换

两者都是 X9.62 格式的椭圆曲线 public 密钥。通过将基数 64(页眉和页脚行之间的所有内容)放入 ASN.1 解码器,您可以轻松地看到这一点。

您当然可以为此使用 openssl asn1parse -inform PEM,或者您可以将 base 64 粘贴到在线解码器中。例如,这里是 public key representation 1 and representation 2.

的链接

显然第一个使用曲线 seck256r1 的命名曲线表示,另一个 (specifiedCurve) 明确指定所有参数。两者在其他方面没有功能上的区别。

我还没有看到在不自己编码的情况下在两者之间进行转换的任何方法。通常会使用原始域表示。