用CryptoAPI从证书中提取公钥的方法 |
小工头 发表于 2007/4/12 21:58:11 | 这段时间一直在和CryptoAPI做斗争。被上面的这道题憋了很久,在网上没有查到直接的解决办法,后来瞎试八试的不小心给试出来了。郁闷的是,相关的代码没维护好,一不留神给删掉了,害得俺今天又被憋了一下午,好不容易才回想起来,赶快记录一下首先,读入一个CER文件,用CertCreateCertificate生成CERT_CONTEXT。CERT_CONTEXT这个数据结构中有一项CERT_INFO,CERT_INFO里面有一项SubjectPublicKeyInfo(从前有座山,山上有个庙,庙里有个老和尚,还有一个小和尚……)。SubjectPublicKeyInfo是一段PUBLICKEY_INFO类型的数据段,里面保存的是算法的ID和DER编码的公钥。有了这段DER编码,我们就可以用其他工具(比如openssl)来解析公钥的各项参数。遗憾的是,CryptoAPI定义的接口却不能直接处理DER编码,必须把它们再包装成CryptoAPI自己定义的PUBLICKEYBLOB。该怎么做呢?先用CryptAcqiureContext(...NEWKEYSET)来新建一个容器,容器名称可以自己起。然后,用CryptImportPublicKeyInfo()把刚才得到的SubjectPublicKeyInfo导进建好的容器中,再用CryptExportKey(...PUBLICKEYBLOB)导出公钥,就得到了CryptAPI接口普遍支持的PUBLICKEYBLOB。说穿了其实很简单,呵呵。
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
喜鹊174(游客)发表评论于2007/4/17 10:59:51 | 呵呵~听工头一席话,胜读两天半书~~
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
ahava99(游客)发表评论于2007/4/15 17:35:50 | 天书啊~~~
雁过留名~~~~
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
小工头发表评论于2007/4/15 13:44:49 | CERT_PUBLIC_KEY_INFO保存的公钥的确是BLOB类型,但那是BITEBLOB,说穿了就是一段原始的二进制串。真正的PUBLICKEYBLOB里面有BLOBHEADER,有RSAPUBKEY,还有modulus,这些都是转换后才能得到的结果。那一段BITEBLOB的价值在于使得CryptoAPI能够与其他基于DER编码的程序交互使用。事实上,DER以及X.509等等才是真正的国际标准,与操作系统无关,而CryptoAPI只适用于Windows,是一套非标准的接口。只是M$势力太大,所以……
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
喜鹊174(游客)发表评论于2007/4/13 22:55:17 | CERT_PUBLIC_KEY_INFO保存的公钥不是BLOB类型么,为什么不能直接使用?如果是编码不同的原因话,这个接口也太~~
向工头请教
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
小工头发表评论于2007/4/12 23:32:56 | 偶尔SHOW一下专业嘛
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
鑫粉MM(游客)发表评论于2007/4/12 22:55:09 | ME TOO
|
|
回复:用CryptoAPI从证书中提取公钥的方法 |
fish(游客)发表评论于2007/4/12 22:46:41 | 貌似看不懂呐
|
|
» 1 »
|

.: 公告
有人的地方就有恩怨 有恩怨的地方就是江湖 人在江湖漂,谁能不挨刀 |
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
.: 我的分类(专题)
|

.: 最新日志
.: 最新回复
|

blog名称:少年包工头的工作日记 日志总数:629 评论数量:1458 留言数量:56 访问次数:8978002 建立时间:2004年12月8日 |
|

.: 留言板
|

.: 链接
|

|