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_BASE64(0)表示Base64编码格式,CAPICOM_ENCODE_BINARY(1)表示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);
此代码的运行效果为选择数字证书后,弹出加密结果。最后显示解密结果即原文。