6.1.1 PBES1 Encryption Operation (PBES1 加密操作)
PBES1 的加密操作包括以下步骤, 在密码 P 下加密消息 M 以产生密文 C:
-
如第 4 节所述, 选择八个八位字节的盐值 S 和迭代次数 c.
-
将 PBKDF1 密钥派生函数 (第 5.1 节) 应用于密码 P、盐值 S 和迭代次数 c 以产生长度为 16 个八位字节的派生密钥 DK:
DK = PBKDF1 (P, S, c, 16)
- 将派生密钥 DK 分离为由 DK 的前八个八位字节组成的加密密钥 K 和由后八个八位字节组成的初始化向量 IV:
K = DK<0..7>
IV = DK<8..15>
- 连接 M 和填充串 PS 以形成编码消息 EM:
EM = M || PS
其中填充串 PS 由 8-(||M|| mod 8) 个八位字节组成, 每个八位字节的值为 8-(||M|| mod 8).填充串 PS 将满足以下语句之一:
PS = 01, 如果 ||M|| mod 8 = 7
PS = 02 02, 如果 ||M|| mod 8 = 6
...
PS = 08 08 08 08 08 08 08 08, 如果 ||M|| mod 8 = 0
编码消息的长度 (以八位字节为单位) 将是 8 的倍数, 并且可以从编码消息中明确恢复消息 M.(此填充规则取自 RFC 1423 [RFC1423].)
-
使用底层分组密码 (DES 或 RC2) 在 CBC 模式下, 在加密密钥 K 和初始化向量 IV 下加密编码消息 EM 以产生密文 C.对于 DES, 密钥 K 应被视为 56 位 DES 密钥的 64 位编码, 奇偶位被忽略 (参见 [NIST46]).对于 RC2, "effective key bits" (有效密钥位) 应为 64 位.
-
输出密文 C.
盐值 S 和迭代次数 c 可以在 AlgorithmIdentifier 值中传递给执行解密的一方 (参见附录 A.3).