密码消息语法(CMS)详解与签名数据示例
1. 密码消息语法(CMS)概述
密码消息语法(Cryptographic Message Syntax,简称 CMS)为加密或签名的数据提供了一种封装语法。它的一个显著特点是允许不同类型的保护机制嵌套使用,例如签名消息可以作为加密消息的明文,或者加密消息可以被签名。此外,签名消息还可以附带属性,这些属性会包含在最终的签名中。
CMS 最初定义于 RSA Security 的 PKCS #7 中,后来被纳入 RFC 标准,目前由 RFC 3852 表示。在 Bouncy Castle API 中,有两个包专门用于 CMS:
-org.bouncycastle.cms:包含处理涉及加密、签名和压缩消息的创建及其处理的高级类。
-org.bouncycastle.asn1.cms:是一组低级类,为 CMS ASN.1 模块中定义的 ASN.1 结构提供 Java 对象等效物。
2. 基本 CMS 结构
CMS 的基本结构是 ContentInfo 对象,它最初源自 PKCS #7。其定义如下:
ContentInfo ::= SEQUENCE { ContentType ContentType, content [0] EXPLICIT ANY DEFINED BY contentType } ContentType ::= OBJECT IDENTIFIERContentInfo 结构的作