“PBKDF2”以“PB”开头,意思是“基于密码”。这是用于密码的。密码不仅仅是一个字母序列;它是一个人类可以记住和输入的字母序列。一个 256 位的密钥,作为密钥应该是(使用加密强 PRNG)生成的,不是密码,即使您将其编码为字母。
另一种说法是,PBKDF2 功能的核心是应对密码的固有弱点:因为它们可以由人脑管理,所以它们很弱并且可以被暴力破解。正确的加密密钥(如您使用 生成的密钥RNGCryptoServiceProvider)没有此弱点,因此不需要 PBKDF2。
现在有一个切线用途: PBKDF2 不仅是 PB,它还是一个KDF。它具有可配置的输出长度。因此,如果您的源密钥比您需要的要短,那么 KDF,尤其是 PBKDF2,可以方便地获取尽可能多的密钥材料。例如,您有一个 256 位密钥,但您需要加密并检查完整性,为此您希望有一个 256 位 AES 密钥和一个用于 HMAC 的 256 位密钥。要将 256 位主密钥转换为 512 位密钥材料,您需要一个 KDF。但是,PBKDF2 具有特定于密码的特性(输入是字母,而不是位;需要盐),通常不适合此类工作。SSL/TLS 用于此类工作的自定义功能(已被彻底调查,因为 SSL 是密码学家的高调目标),它称之为“PRF”。