对称密码算法的优点是加解密运算非常快,适合处理大批量数据,但其密钥的分发与管理比较复杂。而非对称密码算法的特点是公钥与私钥分离,非常适合密钥的分发与管理;但其运行速度不快,又不适合处理大批量数据。如果将对称密码算法和非对称密码算法的优点结合起来,则既能处理大批量数据,又能简化密钥的分发与管理,于是数字信封机制应运而生。
数字信封并不需要分发和管理对称密钥,而是随机产生对称密钥,采用对称密码算法对大批量数据进行加密,并采用非对称密码算法对该对称密钥进行加密;解密时,先用非对称密码算法解密后获得对称密钥,然后使用对称密码算法解密后获得数据明文。
数字信封的功能类似于普通信封,采用对称密码算法对消息进行加密类似于信纸上的内容,采用非对称密码算法对对称密钥加密类似于信封,信封将信纸包装起来,保证了消息的安全性。
数字信封机制的具体流程如下:
① 消息发送方需要预先获得消息接收方的公钥。
② 消息发送方随机产生对称密钥,并用该密钥和对称算法对消息进行加密。
③ 消息发送方用消息接收方的公钥和非对称算法对上述对称密钥进行加密
④ 消息发送方将消息密文和对称密钥密文一起发送给消息接收方。
⑤ 消息接收方收到消息密文和对称密钥密文。
⑥ 消息接收方使用自己的私钥和非对称算法对对称密钥密文进行解密后获得对称密钥明文。
⑦ 消息接收方使用上述对称密钥和对称算法对消息密文解密后获得消息明文。
数字信封的生成和解开过程如图5-7所示。

PKCS #7规范规定了数字信封消息的具体封装格式。数字信封消息封装格式用ASN.1描述如下:
EnvelopedData ∷= SEQUENCE {
Version Version,
recipientInfos RecipientInfos,
encryptedContentInfo EncryptedContentInfo }
RecipientInfos ∷= SET OF RecipientInfo
EncryptedContentInfo ∷= SEQUENCE {
contentType ContentType,
contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier,
encryptedContent[0] IMPLICIT EncryptedContent OPTIONAL }