import win32com.client
store = win32com.client.Dispatch('CAPICOM.Store')
# 打开证书存储区
# 2 -> CAPICOM_CURRENT_USER_STORE
# 0 -> CAPICOM_STORE_OPEN_READ_ONLY
store.Open(2, "My", 0)
# 查找有效证书
# 12 -> CAPICOM_CERTIFICATE_FIND_KEY_USAGE
# 0x00000080 -> CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE
# 9 -> CAPICOM_CERTIFICATE_FIND_TIME_VALID
# 6,6 -> CAPICOM_CERTIFICATE_FIND_EXTENDED_PROPERTY,CERT_KEY_SPEC_PROP_ID
stores = store.Certificates.Find(12,0x00000080).Find(9).Find(6,6)
stores = store.Certificates.Find(0,szThumbprint)# szThumbprint -> 按缩略图查询
# 0 -> CAPICOM_CERTIFICATE_FIND_SHA1_HASH
# 找到证书计数
stores.Count
# 获取证书信息
for data in stores:
data.GetInfo(0)# 颁发给
data.GetInfo(1)# 颁发者
data.GetInfo(2)# 主题(E) Email
data.GetInfo(3)# ''
data.GetInfo(4)# 主要名称= RFC822 Name=
data.GetInfo(5)# ''
data.GetInfo(6)# 主题(CN)
data.GetInfo(7)# 颁发者
data.Thumbprint# 缩略图
或者
stores.Item(idx).GetInfo(idx2)# idx 1-stores.Count
# idx2 0-7
# 证书选择
selCert = soters.Select()
selCert.GetInfo(0-7)
selCert.Thumbprint
# 数据签名
SignedData = win32com.client.Dispatch('CAPICOM.SignedData')
Signer = win32com.client.Dispatch('CAPICOM.Signer')
TimeAttribute = win32com.client.Dispatch('CAPICOM.Attribute')
SignedData.Content = 'Test'# 签名内容
Signer.Certificate = ret.Item(1)# 选择的证书
TimeAttribute.Name = 0# 0 -> CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME
import datetime
TimeAttribute.Value = datetime.datetime('2010-04-22')
Signer.AuthenticatedAttributes.Add(TimeAttribute)
szSignature = SignedData.Sign(Signer, True, 0)# 0 -> CAPICOM_ENCODE_BASE64
# 签名校验
SignedData.Content='Test';
SignedData.Verify(szSignature, true, 1);# 1 -> CAPICOM_VERIFY_SIGNATURE_AND_CERTIFIC
本文发布于:2024-02-04 15:31:33,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170710595656719.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |