CAPICOM中的重要对象如下,会用到,而且也只用到这些:
CAPICOM.Store //证书库对象
CAPICOM.Certificates //证书集合对象
CAPICOM.Certificate//单个证书对象
CAPICOM.Signer //签名者对象
CAPICOM.SignedData (重中之重)//签名后的数据
由于签名是在客户端完成的,所以,只能用客户端脚本来写(以VBSCRIPT为例):
Set oStore =CreateObject("CAPICOM.Store")
oStore.Open CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY Or CAPICOM_STORE_OPEN_EXISTING_ONLY
//打开本地的证书库,参数意义不再详解
Set oStoreCerts = CreateObject("CAPICOM.Certificates")
Set oStoreCerts =oStore.Certificates
oStoreCerts.Find(CAPICOM_CERTIFICA
TE_FIND_KEY_USAGE,
CAPICOM_DIGITAL_SIGNATURE_KEY_
USAGE, True) //把本地的证书库中的证书放到一个证书链
Set oCert = CreateObject("CAPICOM.Certificate")
Set oCerts =CreateObject("CAPICOM.Certificates")
For each oCert in oStoreCerts
if Len (oCert.GetInfo ( CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME )) > 0
Then
oCerts.Add oCert
End if
Next //找到有效的证书放到另一个证书链对象中
set oSignerCert = CreateObject("CAPICOM.Certificate")
if oCerts.Count = 1 Then
Set oSignerCert = oCerts(1)
else
set oSelects = CreateObject("CAPICOM.Certificates")
set oSelects =oCerts.Select()
Set oSignerCert= oSelects(1)
//得到用户所选择的证书,如果有多个有效证书,会弹出对话框让用户选择
Set oSigner = CreateObject("CAPICOM.Signer")
oSigner.Certificate = oSignerCert
//指定签名者,并指定签名者的所用来签名的证书
Set oSignedData = CreateObject("CAPICOM.SignedData")
oSignedData.Content = DataNeedSign(需要签名的数据)
//定义签名数据对象,并指定要被签名的数据。至于DataNeedSign的内容是什么,
自己根据情况而定。
SignedResult(被签名后的数据)=oSignedData.Sign( oSigner )
//签名就完成了,SignedResult与 DataNeedSign同时发给另一方。
现在,如果B方收到SignedResult与 DataNeedSign
CAPICOM.SignedData s = new CAPICOM.SignedDataClass();
s.Verify(Information,false,CAPICOM.CAPICOM_SIGNED_
DATA_VERIFY_FLAG.CAPICOM_
VERIFY_SIGNATURE_AND_CERT
IFICATE);//身份认证。
If(s.Content==DataNeedSign)
提示数据完整!//完整性确定
//假设B方在我们的平台上验证的(缺点:万一下载数据时被改就无法控制,但是由于某些原因,只能做到这一步,如果要到了B的客户端验证,也可以。只是脚本会变一点。)
CAPICOM.Store //证书库对象
CAPICOM.Certificates //证书集合对象
CAPICOM.Certificate//单个证书对象
CAPICOM.Signer //签名者对象
CAPICOM.SignedData (重中之重)//签名后的数据
由于签名是在客户端完成的,所以,只能用客户端脚本来写(以VBSCRIPT为例):
Set oStore =CreateObject("CAPICOM.Store")
oStore.Open CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY Or CAPICOM_STORE_OPEN_EXISTING_ONLY
//打开本地的证书库,参数意义不再详解
Set oStoreCerts = CreateObject("CAPICOM.Certificates")
Set oStoreCerts =oStore.Certificates
oStoreCerts.Find(CAPICOM_CERTIFICA
TE_FIND_KEY_USAGE,
CAPICOM_DIGITAL_SIGNATURE_KEY_
USAGE, True) //把本地的证书库中的证书放到一个证书链
Set oCert = CreateObject("CAPICOM.Certificate")
Set oCerts =CreateObject("CAPICOM.Certificates")
For each oCert in oStoreCerts
if Len (oCert.GetInfo ( CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME )) > 0
Then
oCerts.Add oCert
End if
Next //找到有效的证书放到另一个证书链对象中
set oSignerCert = CreateObject("CAPICOM.Certificate")
if oCerts.Count = 1 Then
Set oSignerCert = oCerts(1)
else
set oSelects = CreateObject("CAPICOM.Certificates")
set oSelects =oCerts.Select()
Set oSignerCert= oSelects(1)
//得到用户所选择的证书,如果有多个有效证书,会弹出对话框让用户选择
Set oSigner = CreateObject("CAPICOM.Signer")
oSigner.Certificate = oSignerCert
//指定签名者,并指定签名者的所用来签名的证书
Set oSignedData = CreateObject("CAPICOM.SignedData")
oSignedData.Content = DataNeedSign(需要签名的数据)
//定义签名数据对象,并指定要被签名的数据。至于DataNeedSign的内容是什么,
自己根据情况而定。
SignedResult(被签名后的数据)=oSignedData.Sign( oSigner )
//签名就完成了,SignedResult与 DataNeedSign同时发给另一方。
现在,如果B方收到SignedResult与 DataNeedSign
CAPICOM.SignedData s = new CAPICOM.SignedDataClass();
s.Verify(Information,false,CAPICOM.CAPICOM_SIGNED_
DATA_VERIFY_FLAG.CAPICOM_
VERIFY_SIGNATURE_AND_CERT
IFICATE);//身份认证。
If(s.Content==DataNeedSign)
提示数据完整!//完整性确定
//假设B方在我们的平台上验证的(缺点:万一下载数据时被改就无法控制,但是由于某些原因,只能做到这一步,如果要到了B的客户端验证,也可以。只是脚本会变一点。)