PKCS7的数字信封格式分为两种:带签名的数字信封和不带签名的数字信封。由于这个数字信封的生成过程比较复杂,所以这两种格式比较容易记混,导致都搞不清楚一个数字信封里面到底是存储的什么内容了。下面我就详细的解释一下,这两种数字信封的生成过程和其详细的数据结构。
首先是不带签名的数字信封。
不带签名的数字信封内容类型由任意类型的加密内容和加密的一个/多个接收者的内容加密密钥组成,其生成过程如下:
1. 发送方随机产生一个对应于特定加密内容加密密钥。
2. 发送方将内容加密密钥用每个接收者的公钥加密。
3. 对于每一个接收者,把加了密的内容加密密钥和接收者的其他信息放入RecipientInfo值中。
4. 用内容加密密钥加密内容。
5. 将所有接收者的RecipientInfo值和加了密的内容放入EnvelopedData值中。
用ASN.1来描述一下它的结构:
EnvelopedData ::= SEQUENCE {
version Version,
recipientInfos RecipientInfos,
encryptedContentInfo EncryptedContentInfo}
数据结构1
其中RecipientInfos是一个集合的形式,包含一个或多个,即:
RecipientInfos::= SET OF RecipientInfo
对于RecipientInfos 它的格式如下(我直接把注释贴的它的后面):
RecipientInfos::= SEQUENCE {
version Version,语法的版本号
issue