27.3.9 CAPICOM对象——EnvelopedData对象

  EnvelopedData对象提供了打包、解包数字信封的方法和属性。生成数字信封的过程是,首先产生一个临时对称加密密钥(session key),使用数字信封接收者证书的公钥对session key加密,然后用session key对待加密数据进行加密,加密后的数据以及加密后的session key组成了数字信封。它包括的主要属性如表所示。

EnvelopedData对象的主要属性

数据类型

权限

意义

Content

String

/

待加密的原始数据

Algorithm

Algorithm

/

加密session key的对称算法类型

Recipients

Recipients

只读

数字信封接收者Recipient

EnvelopedData对象包括以下主要方法:

1.生成数字信封方法Encrypt

方法功能:生成数字信封,为每个接收者加密session key,并返回加密后的数据包。

方法定义:

[Visual Basic]

ObjectName.Encrypt(

  EncodingType as CAPICOM_ENVELOP_ENCODING_TYPE

) as String·

参数说明:

q      EncodingType[IN] 数字信封的格式,CAPICOM_ENCODE_BASE640)表示Base64编码格式,CAPICOM_ENCODE_BINARY1)表示DER编码的二进制格式。默认是Base64编码格式。

返回值:String类型的某一特定编码格式的证书数据

提示:数字信封包括加密后的原文以及为每个接收者加密的session key。这些session key都是用接收者证书的公钥加密的,只有用接收者私钥才能解密。

2.解密数字信封方法Decrypt

方法功能:解密数字信封。解密成功后EnvelopedData对象的Content属性就是原始数据。解密的证书必须拥有对应私钥的权限。

方法定义:

[Visual Basic]

ObjectName.Decrypt(

  EnvelopedMessage as String

)

参数说明:

q      EnvelopedMessage[IN] 加密的数字信封。

返回值:无。

示例代码:

         var oStore = new ActiveXObject("CAPICOM.Store");

         var oEnvelopedData = new ActiveXObject("CAPICOM.EnvelopedData");

         oStore.Open(CAPICOM_CURRENT_USER_STORE,CAPICOM_MY_STORE,CAPICOM_STORE_OPEN_READ_ONLY | CAPICOM_STORE_OPEN_EXISTING_ONLY);

         var oStoreCerts = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_KEY_USAGE, CAPICOM_DIGITAL_SIGNATURE_KEY_USAGE, true);

         oStoreCerts = oStoreCerts.Select();//弹出证书选择框

         var oCert = oStoreCerts (1);

         oEnvelopedData.Content="机密数据!";

         oEnvelopedData.Algorithm.Name = 2;

         oEnvelopedData.Algorithm.KeyLength = 0;

         oEnvelopedData.Recipients.Add(oCert);

         var strEnvelopedData = oEnvelopedData.Encrypt(CAPICOM_ENCODE_BASE64);

         alert("数字信封:"+strEnvelopedData);

         //解密

         oEnvelopedData.Decrypt(strEnvelopedData);

         alert("原文:"+oEnvelopedData.Content);

此代码的运行效果为选择数字证书后,弹出加密结果。最后显示解密结果即原文。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章