CryptAPI 导出的密匙BLOB数据,BLOB数据类型 + 按照ASN.1编码规范的数据。这里以导出的私钥分析为例:
RSA private key 的ASN.1编码规范如下
ASN.1 structure of RSA private key is defined in PKCS#1 (RFC 3447):
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 }
RSA Private Key BLOB 结构如下:
- Type (1 byte):密匙类型 rsa私匙为 0x7
- Version (1 byte):版本 值为0x2
- Reserved (2 bytes):保留字节,值为0
- Key Alg (4 bytes): 0x0000A400 (RSA_KEYX).
- Magic (4 bytes): 私匙为 assii "RSA2"
- Bitlen (4 bytes):模数n的bit位数
- PubExp (4 bytes):e
- Modulus (variable):n
- P (variable): p
- Q (variable): q
- Dp (variable):d mod (p-1)
- Dq (variable):d mod (q-1)
- Iq (variable):inverse of q modulus p 笔者注:这里的值为q对p的模逆元素,设值为r,则 rq ≡ 1 ( mod p),可以自行查找算法计算
- D (variable):d
注意 以上字段的编码字节序为 小端序
详细了解移步msdn:http://msdn.microsoft.com/en-us/library/cc250013.aspx
了解结构后,可以自己构建密匙了,也可以和其它密匙结构进行转换,另外附一个不错的rsaTool生成工具http://tools.pediy.com/Cryptography/RSATool/RSATool.1.7.rar
本文由 donque 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Jan 20, 2019 at 06:50 pm