RSA私钥DER编码规则 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 } DER是一个TLV编码。 SEQUENCE是总的TAG,TAG=0x30,Length=0x0258后面是数据内容。 长度的表示方法有以下2种情况: 1. 数据长度<0x80的时候,Length即为数据的长度; 2. 数据长度>=0x80的时候,Length为0x8?,表示后面跟的?表示的Length长度。例如82 01 20,82表示82后面2个字节为长度的字节长度,数据长度为0x0120。 Version的TAG为0x02,在RSA私钥的DER编码中,除了SEQUENCE的TAG为0x30,其余的为0x02。目前的Version全都为0。 modulus 值TAG为0x02,其值的类型为整型。 这里要注意的是当第一个字符的最高位为1时,即为0x8?时,要在最高位填充0x00。这是因为modulus 为一个大整数,最高位为符号位,其为1时,就是负数,所以要在最高位填充0x00以保证不为负。