我正在查看 google.com 的公钥证书,通过 chrome 访问https://google.com并单击证书图标来访问它。我看到它说公钥 RSA(1024 位),但我在实际密钥中看到 140 个十六进制对。我不应该看到 128 个十六进制对吗?转换的背后是什么?
问问题
406 次
1 回答
1
您可以在RFC 3279的第 2.3.1 节中查找存储公共 RSA 密钥的结构:
The RSA public key MUST be encoded using the ASN.1 type RSAPublicKey:
RSAPublicKey ::= SEQUENCE {
modulus INTEGER, -- n
publicExponent INTEGER } -- e
where modulus is the modulus n, and publicExponent is the public
exponent e. The DER encoded RSAPublicKey is the value of the BIT
STRING subjectPublicKey.
对于您的 Google 证书,您已找到以下 140 个字节:
30 81 89 02 81 81 00 d2 e6 cd 45 3e a2 44 0c 31 72 ef 2c 3b
e2 e5 c4 c6 a0 b8 32 0e 9c 7e 7b 68 2f 15 43 48 97 24 02 3c
2b c0 b8 cf 74 2b 76 37 33 e5 31 2f 72 53 f8 ac 5e 01 bb 7c
b7 32 40 e5 28 78 5f dd a9 3b da b6 af 05 30 57 2b c2 cb 59
29 2e 34 ec e5 89 9e 61 70 6a 91 ab 49 3c 1b 24 8e 12 35 82
42 6b fc 28 f2 ee ae 1b 5c 60 c5 e8 a5 3d a1 1a 3a 19 b3 5e
84 f9 b5 93 1d 05 e9 9d 2a ba 86 6b ce 7d 83 02 03 01 00 01
如果您在 ASN.1 转储中查看它们,它们看起来像这样:
<30 81 89>
271 30 137: SEQUENCE {
<02 81 81>
274 02 129: INTEGER
: 00 D2 E6 CD 45 3E A2 44 ....E>.D
: 0C 31 72 EF 2C 3B E2 E5 .1r.,;..
: C4 C6 A0 B8 32 0E 9C 7E ....2..~
: 7B 68 2F 15 43 48 97 24 {h/.CH.$
: 02 3C 2B C0 B8 CF 74 2B .<+...t+
: 76 37 33 E5 31 2F 72 53 v73.1/rS
: F8 AC 5E 01 BB 7C B7 32 ..^..|.2
: 40 E5 28 78 5F DD A9 3B @.(x_..;
: DA B6 AF 05 30 57 2B C2 ....0W+.
: CB 59 29 2E 34 EC E5 89 .Y).4...
: 9E 61 70 6A 91 AB 49 3C .apj..I<
: 1B 24 8E 12 35 82 42 6B .$..5.Bk
: FC 28 F2 EE AE 1B 5C 60 .(....\`
: C5 E8 A5 3D A1 1A 3A 19 ...=..:.
: B3 5E 84 F9 B5 93 1D 05 .^......
: E9 9D 2A BA 86 6B CE 7D ..*..k.}
: 83 .
<02 03>
406 02 3: INTEGER 65537
: }
大块包含您要求的 1024 位模数。它比这 1024 位的严格要求长 1 个字节(129 个字节),因为它是一个正数,在此处存储为有符号整数;由于设置了 1024 位中的最高位,如果没有前置字节,则整数将被解释为负数00
。
在此之后,您会看到公共指数 65537,需要 3 个字节。
除了这 132 个字节的数据之外,还有 8 个字节的编码数据:
<30 81 89>
: 一个 137 字节长的 SEQUENCE 内容跟在这个标记后面<02 81 81>
: 一个 129 字节长的 INTEGER 内容跟随这个标记<02 03>
: 一个 3 字节长的 INTEGER 内容跟在这个标记后面
于 2013-06-20T08:58:18.493 回答