在PKCS#1 RSA算法标准中定义RSA私钥语法为:
    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
    }
    类型RSAPrivateKey 的各域具有以下意义:
    • version 是版本号,为了与本文档的今后版本兼容。本篇文档的这个版本号应该是0,如果使用了多素数,则版本号应该是1。
    Version ::= INTEGER { two-prime(0), multi(1) }
    (CONSTRAINED BY {— version must be multi if otherPrimeInfos present —})
    • modulus 是RSA合数模n。
    • publicExponent 是RSA的公开幂e。
    • privateExponent 是RSA的私有幂d。
    • prime1 是n的素数因子p。
    • prime2 i是n的素数因子q。
    • exponent1 等于d mod (p − 1)。
    • exponent2 等于d mod (q − 1)。
    • coefficient 是CRT系数 q–1 mod p。
    • otherPrimeInfos 按顺序包含了其它素数r3, …, ru的信息。如果version是0 ,它应该被忽略;而如果version是1,它应该至少包含OtherPrimeInfo的一个实例。
    OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
    OtherPrimeInfo ::= SEQUENCE {
    prime INTEGER, — ri
    exponent INTEGER, — di
    coefficient INTEGER — ti
    }
    OtherPrimeInfo的各域具有以下意义:
    • prime 是n的一个素数因子ri ,其中i ≥ 3。
    • exponent 是di = d mod (ri − 1)。
    • coefficient 是CRT系数 ti = (r1 · r2 · … · ri–1)–1 mod ri。

    公钥语法为:
    RSAPublicKey ::= SEQUENCE {
    modulus INTEGER, — n
    publicExponent INTEGER — e
    }
    类型RSAPublicKey的域具有以下意义:
    • modulus 是RSA的合数模n。
    • publicExponent 是RSA公开幂e。

    在OpenSSL中生成RSA私钥公钥文件并解析

    OpenSSL中RSA私钥文件生成命令为:
    openssl genrsa -out private_rsa.pem 1024
    生成RSA公钥命令为:
    openssl rsa -in private_rsa.pem -pubout -out public_rsa.pem
    生成的私钥pem文件内容如下:
    ——-BEGIN RSA PRIVATE KEY——-
    MIICXAIBAAKBgQDnsN1F66mF6h6y/XpyN+ZU/w5AyeWBjZNIqi33/ATn4qQpw+kD
    HrKyF7sQ/RNw6tibM90iM6VOA14305umPbPROJJs3JoB6Lao74SUm58aO9T+Ct7r
    O52E+3r5jyDQicdRl6lIhLigNADXPD/KoNwfrRrCyw4wTHMZhSHc8eUHeQIDAQAB
    AoGABVTIgqddiztL4Yp7ms02e5Yy2cLLiSOc0/s2e5JM+pj4dg2P+wZlzjtFjqqE
    HAELYubam8LcduMU8+vmlPiufoK9fo47fLsX1PFCY9TDKL1dFlZgBAmJU7hR27h/
    gCo4r3PMub/snq7n+skrbarZbX1J6Q1o5UYKFIrrIjNObEECQQD0DIzIdMObPUUu
    W+JXg10kz/ayYn3irxZmp5ngc+b9WZfSOPehZBsLWsIb1eC7y9DZMhZfBQ/sPaO8
    0tvqJMUFAkEA8wlj3B3zK20pK+Hj+vFiAlaQmqILTSfv/9jMm8tbVfXt+bHrmZdN
    jruGVQDb7V2pW9HeG5PgDB3vKXeOiVfC5QJAYikKFzaf1rj2ModSqtBzjnL3Txi+
    eYbjA7c19UmpBw4aOrwfHhMdrZt7p6aHFgIMps+2n9Fxbhv8194YBj1z4QJAPONW
    XFg4iuGvVeoi9sSwvEs5sTP1xt/BlgSXxlRdTpztgQgdMX6hlKfQkM1FTCOSAYoD
    rj8O+5ooR+hHEoulLQJBAOtaMvMWIOG7mARngpwqfJ07L41/T0ITHteiiYJfCurz
    kLVCx1XA3MlN+u5gn7osUHMbah0Ze3uakSZ6za3mL5Y=
    ——-END RSA PRIVATE KEY——-
    此时文件为BASE64编码,在openssl中执行以下命令,将BASE64编码的文件装换成二进制编码:
    openssl base64 -d -in private_rsa.pem -out private.pem
    生成的private.pem 文件为BASE64解码后的文件,此文件是将RSA密钥语法中的结构进行DER
    编码后的二进制表现形式。对其进行解析,解析结果如下:
    标签头 3082025c(4 bytes) 类型为SEQUENCE 后接 604 bytes
    020100 INTEGER 长度为0 内容为:VERSION
    028181 INTEGER 长度为129 bytes 内容为: n(modulus)
    00e7b0dd45eba985ea1eb2fd7a7237e654ff0e40c9e5818d9348aa2df7fc04e7e2a429c3e9
    031eb2b217bb10fd1370ead89b33dd2233a54e035e37d39ba63db3d138926cdc9a01e8b6a8
    ef84949b9f1a3bd4fe0adeeb3b9d84fb7af98f20d089c75197a94884b8a03400d73c3fcaa0
    dc1fad1ac2cb0e304c73198521dcf1e50779
    0203 INTEGER 长度为3 bytes 内容为: e(publicExponent)
    010001
    028180 INTEGER 长度为128 bytes 内容为: d(privateExponent)
    0554c882a75d8b3b4be18a7b9acd367b9632d9c2cb89239cd3fb367b924cfa98f8760d8ffb
    0665ce3b458eaa841c010b62e6da9bc2dc76e314f3ebe694f8ae7e82bd7e8e3b7cbb17d4f1
    4263d4c328bd5d16566004098953b851dbb87f802a38af73ccb9bfec9eaee7fac92b6daad9
    6d7d49e90d68e5460a148aeb22334e6c41
    0241 INTEGER 长度为65 bytes 内容为: p(prime1)
    00f40c8cc874c39b3d452e5be257835d24cff6b2627de2af1666a799e073e6fd5997d238f7
    a1641b0b5ac21bd5e0bbcbd0d932165f050fec3da3bcd2dbea24c505
    0241 INTEGER 长度为65 bytes 内容为: q(prime2)
    00f30963dc1df32b6d292be1e3faf1620256909aa20b4d27efffd8cc9bcb5b55f5edf9b1eb
    99974d8ebb865500dbed5da95bd1de1b93e00c1def29778e8957c2e5
    0240 INTEGER 长度为64 bytes 内容为: d mod(p-1) exponent1
    62290a17369fd6b8f6328752aad0738e72f74f18be7986e303b735f549a9070e1a3abc1f1e
    131dad9b7ba7a68716020ca6cfb69fd1716e1bfcd7de18063d73e1
    0240 INTEGER 长度为 64 bytes 内容为: d mod (q-1) exponent2
    3ce3565c58388ae1af55ea22f6c4b0bc4b39b133f5c6dfc1960497c6545d4e9ced81081d31
    7ea194a7d090cd454c2392018a03ae3f0efb9a2847e847128ba52d
    0241 INTEGER 长度为65 bytes 内容为: q -1 mod p coefficient
    00eb5a32f31620e1bb980467829c2a7c9d3b2f8d7f4f42131ed7a289825f0aeaf390b542c7
    55c0dcc94dfaee609fba2c50731b6a1d197b7b9a91267acdade62f96
    也可以直接使用OpenSSL命令以明文形式输出密钥的各个参数值,例如:
    openssl rsa -in private_rsa.pem -text -out private.txt
    然后就可以在private.txt文件中查看RSA密钥中各个参数的值