RSA私钥DER编码

来源:互联网 发布:外交趣事 知乎 编辑:程序博客网 时间:2024/05/06 12:54
例子:512 bits

3082013A020100024100A37D829F96226E5B7994EED72AB2C1E1A1A1DDD1BB3D8D7757BE8EE1B2CE68CDD69C87B58B28DD

BE9F7CD3549355FDB9CA00168973022DB54CA0F294C02D8BE302030100010240462DC63882D5DCD15F6B52EB01E521DC9C

E942B298D15F3C6F69D9238101A172AA6624FF1D809CEE7837F0F5D8A65CEB842135970AE192A92BD60A01C724A4A1022100D

708D658770058CB52D63E63D2E7CB81B31F66BCD2FBC32BCE2E2005D89BBBCF022100C2A2E086BBDAD1E87119F5623B507

AC883AB904FA9029DD5FBD114CEBD498FAD02204A8043532F17ADABF42D4A3C67ABEB742A4D2CD92AF8132CB02886EBBF9A

653D0220087FF06A31DDF678BE27B20D9E257F972E18D9EE80A4FA9B93A9A7CCF77B34E902210080AD5A6062279F99650CF39

BDAC2CD061CCF5E081D500065856AF12C98A0AE78

 

分解后

3082013A

020100 -- 版本号

0241

00A37D829F96226E5B7994EED72AB2C1E1A1A1DDD1BB3D8D7757BE8EE1B2CE68CDD69C87B58B28DDBE9F7CD3549355FD

B9CA00168973022DB54CA0F294C02D8BE3

0203010001

0240

462DC63882D5DCD15F6B52EB01E521DC9CE942B298D15F3C6F69D9238101A172AA6624FF1D809CEE7837F0F5D8A65CEB8

42135970AE192A92BD60A01C724A4A1

0221

00D708D658770058CB52D63E63D2E7CB81B31F66BCD2FBC32BCE2E2005D89BBBCF

0221

00C2A2E086BBDAD1E87119F5623B507AC883AB904FA9029DD5FBD114CEBD498FAD

0220

4A8043532F17ADABF42D4A3C67ABEB742A4D2CD92AF8132CB02886EBBF9A653D

0220

087FF06A31DDF678BE27B20D9E257F972E18D9EE80A4FA9B93A9A7CCF77B34E9

0221

0080AD5A6062279F99650CF39BDAC2CD061CCF5E081D500065856AF12C98A0AE78

 


例子:31bits

302B0201000204741882490203010001020424E4711D020300D40F0203008C270203008D9F02024C6B02021CBE

 

分解后

302B

0201 00 --RSA版本号,一般00

0204 74188249 --模数n10进制 1947763273,二进制 1110100 00011000 10000010 01001001(31 bits)

0203 010001 --公钥指数e,  65537

0204 24E4711D --私钥指数d,十进制 618950941

020300 D40F  -- p,54287 

020300 8C27  -- q , 35879

020300 8D9F --d mod(p-1),十进制 36255

0202 4C6B  --d mod(q-1),十进制 19563

0202 1CBE --CRT系数,十进制 7358


 



私钥结构:

采用CRT(中国剩余定理-肩上)形式表示:
RSAPrivateKey ::= SEQUENCE {
version           Version, 当前的RSA版本,一般是00
modulus           INTEGER,  -- n   是RSA 合数模n
publicExponent    INTEGER,  -- e    是RSA 的公开幂e
privateExponent   INTEGER,  -- d    是RSA 的私有幂d
prime1            INTEGER,  -- p   是的素数因子p
prime2            INTEGER,  -- q   是的素数因子q
exponent1         INTEGER,  -- d mod (p-1)    等于d mod ( p  − 1)
exponent2         INTEGER,  -- d mod (q-1)   等于d mod ( q  − 1)
coefficient       INTEGER,  -- (inverse of q) mod p   是CRT 系数q1 mod p
otherPrimeInfos   OtherPrimeInfos OPTIONAL 
}
DER是一个TLV编码。
SEQUENCE是总的TAGTAG=0x30Length=0x0258后面是数据内容。
长度的表示方法有以下2种情况:
1. 数据长度<0x80的时候,Length即为数据的长度;
2. 数据长度>=0x80的时候,Length0x8?,表示后面跟的?表示的Length长度。例如82 01 2082表示82后面2个字节为长度的字节长度,数据长度为0x0120

VersionTAG0x02,在RSA私钥的DER编码中,除了SEQUENCETAG0x30,其余的为0x02目前的Version全都为0
modulus TAG0x02,其值的类型为整型。这里要注意的是当第一个字符的最高位为1时,即为0x8?时,要在最高位填充0x00。这是因为modulus 为一个大整数,最高位为符号位,其为1时,就是负数,所以要在最高位填充0x00以保证不为负。

原创粉丝点击