PKCS#1种介绍了哈希算法的OID等的ASN.1结构,由于使用ASN.1的解码工具(好比:ASN1View)时,会自动显示出各OID的含义,因此这里就不说明了。下面就只简单摘抄一下RSA公私钥的ASN.1的结构。算法
ASN.1的编码回头会专门介绍,为了便于理解:SEQUENCE,暂时就理解为C语言里面的结构体就好;INTEGER,理解为正数类型就好。数组
RSA公钥:工具
RSAPublicKey :: = SEQUENCE{编码
modulus INTEGER, ------ n(模长,正整数)ci
publicExponent INTEGER ------ e (指数,3~n-1范围内的正整数)io
}入门
RSA公钥的ASN.1结构,能够表述为:名为RSAPublicKey的这个结构呢,就能够用来表述一个RSA公钥了。它有两个INTEGER型变量:modulus和publicExponent。变量
RSA私钥:im
RSAPrivateKey :: = SEQUENCE{语言
version Version,
modulus INTEGER, ------ n
publicExponent INTEGER, ------ e
privateExponent INTEGER, ------ d
prime1 INTEGER, ------ p
prime2 INTEGER, ------ q
exponent1 INTEGER, ------ d mod (p -1)
exponent2 INTEGER, ------ d mod (q -1)
coefficient INTEGER, ------- (inverse of q) mod p
otherPrimeInfos OtherPrimeInfos ------ OPTIONAL(当version为0时,不存在;当 version为1时,必须有)
}
Version :: = INTEGER{ two-prime(0), multi(1)}
版本号的ASN.1结构能够表述为:名为Version的结构体,用于描述版本信息。它相似于枚举类型,其变量类型为INTEGER,取值为0或1。
OtherPrimeInfos :: = SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
OtherPrimeInfos 是由 OtherPrimeInfo组成的数组
OtherPrimeInfo :: = SEQUENCE {
prime INTEGER, --- ri
exponent INTEGER, --- di
coefficient INTEGER --- ti
}
推荐一篇专门介绍ASN.1编码的文章:《ASN.1/BER/DER 编码子集入门指南》