zoukankan      html  css  js  c++  java
  • OPENSSL中RSA私钥文件(PEM格式)解析【一】

    http://blog.sina.com.cn/s/blog_4fcd1ea30100yh4s.html

    在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密钥中各个参数的值

  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/jukan/p/5527922.html
Copyright © 2011-2022 走看看