跳到主要内容

5.1 PBKDF1

PBKDF1 应用哈希函数 (应为 MD2 [RFC1319], MD5 [RFC1321] 或 SHA-1 [NIST180]) 来派生密钥。派生密钥的长度受哈希函数输出长度的限制, MD2 和 MD5 为 16 个八位字节, SHA-1 为 20 个八位字节。PBKDF1 与 PKCS #5 v1.5 [PKCS5_15] 中的密钥派生过程兼容。

建议仅为了与现有应用的兼容性而使用 PBKDF1, 因为它产生的密钥对于某些应用可能不够大。

PBKDF1 (P, S, c, dkLen)

Options (选项): Hash - 底层哈希函数

Input (输入):

  • P - 密码, 八位字节串
  • S - 盐值, 八位字节串
  • c - 迭代次数, 正整数
  • dkLen - 派生密钥的预期长度 (以八位字节为单位), 正整数, MD2 或 MD5 最多为 16, SHA-1 最多为 20

Output (输出): DK - 派生密钥, dkLen 个八位字节的字符串

Steps (步骤):

  1. 如果对于 MD2 和 MD5 dkLen > 16, 或对于 SHA-1 dkLen > 20, 则输出 "derived key too long" (派生密钥太长) 并停止。

  2. 对密码 P 和盐值 S 的连接应用底层哈希函数 Hash 进行 c 次迭代, 然后提取前 dkLen 个八位字节以产生派生密钥 DK:

T_1 = Hash (P || S)
T_2 = Hash (T_1)
...
T_c = Hash (T_{c-1})
DK = T_c<0..dkLen-1>
  1. 输出派生密钥 DK。