谁能帮我理解 MarshalPKIXPublicKey() 和 MarshalPKCS1PublicKey() 之间的区别?
根据评论:// MarshalPKIXPublicKey 将公钥序列化为 DER 编码的 PKIX 格式。
// MarshalPKCS1PublicKey 将 RSA 公钥转换为 PKCS#1,ASN.1 DER 形式。
什么是 DER 编码的 PKIX 格式?
谢谢
您不清楚自己不(或确实)了解了多少。从基础开始:
ASN.1(Abstract Syntax Notation One)是一种通用方案,用于定义要在系统或程序之间进行通信或交换的数据结构。
DER(可分辨编码规则)是一种定义为将 ASN.1 数据编码为可以通信和/或存储的字节序列,并将这些字节序列无损解码回 ASN.1 数据的方案。
PKCS1 aka RFCs 2313,2437,3447, 8017 (Public Key Cryptography Standard #1) 是一个标准,它定义了一系列关于使用 RSA 算法的事情,其中附录 A定义了一个 ASN.1 结构,命名RSAPublicKey
为表示 RSA 公钥,它像任何 ASN.1 结构一样可以进行 DER 编码。
MarshalPKCS1PublicKey 将 RSA 公钥转换为 PKCS#1,ASN.1 DER 形式。
显然是指 PKCS1 中 RSA 公钥的 ASN.1 结构的 DER 编码。
PKIX(Public Key Infrastructure X.509)是 X.509 标准的 Internet 变体(正式称为配置文件),最初由 then-CCITT now-ITU-T 定义,目前在rfc5280中。X.509 和 PKIX 主要定义了公钥证书的格式,它将公钥与其他元数据一起绑定到身份。为此,它必须包含可以处理多个公钥算法的公钥的表示,这是使用SubjectPublicKeyInfo
结构完成的,该结构相当简单,由标识算法的 AlgorithmIdentifier 和包含算法相关的实际公钥值。RSA 的算法相关部分在rfc3279 sec 2.3.1中指定如您所见,它是来自 PKCS1 的 RSAPublicKey 结构,DER 编码。
因此,RSA 公钥的“DER 编码 PKIX 格式”意味着 PKIX/X.509 SubjectPublicKeyInfo 结构的 DER 编码,该结构包含 RSA 的算法标识符(OID 1.2.840.113549.1.1.1 和参数 NULL)和包含DER 编码的 PKCS1 RSAPublicKey。
相关或类似(尽管大多数包括私有非公共和/或 PEM 非 DER):
如何存储/检索 RSA 公钥/私钥
我们如何将字符串从 PEM 转换为 DER 格式
传输 RSA 公钥、javaME、充气城堡的问题
在 Java 中生成 PKCS#1 格式的
RSA 密钥 如何生成 PEM 格式的 PKCS#1 RSA 密钥?
将 RSA 密钥从 BigIntegers 转换为 SubjectPublicKeyInfo 表单
将 X509 公钥转换为 RSA 公钥
加载公钥以创建用于公共加密
和跨堆栈的 rsa 对象:
https ://crypto.stackexchange.com/questions/19149/what-is-格式的公钥容器的技术名称
https://crypto.stackexchange.com/questions/54121/rsa-key-differences-openssl-cli-vs-openssl-ssl-hc-function