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);
此代碼的運行效果爲選擇數字證書後,彈出加密結果。最後顯示解密結果即原文。