什么是 PBEWithMD5AndDes?

Dar*_*vil 7 java encryption

我正在用 Java 学习加密算法并偶然发现了这个算法:

  SecretKey key = SecretKeyFactory.getInstance(
                    "PBEWithMD5AndDES").generateSecret(keySpec);
Run Code Online (Sandbox Code Playgroud)

我知道它代表使用 MD5 和 DES 算法的基于密码的加密。我知道 MD5 和 DES 是两个独立的算法加密密钥,但是 PBEWithMD5AndDes 作为算法究竟意味着什么?

网上没有多少资源可以很好地解释这个“算法”。

我希望有人能给出简单而简短的解释,说明这与普通 MD5 或普通 DES 算法有何不同。

gus*_*to2 8

扩展以前的答案

PBEWithMD5AndDes 作为算法究竟意味着什么?

PBE 使用由密码、随机盐和迭代次数生成的加密密钥,请参阅 KeySpec 参数。

KeySpec pbeSpec = new PBEKeySpec(password.toCharArray(), psswdSalt, PBKDF_INTERATIONS, SYMMETRIC_KEY_LENGTH)
Run Code Online (Sandbox Code Playgroud)

这个想法是 - 密码往往很短而且不够随机,所以很容易猜到。使用迭代次数应该会使猜测更加困难。

PBEWithMD5AndDes使用 MD5 和 DES 生成密钥,请参阅示例代码。现实生活中的实现应该使用更多的迭代次数

这与仅使用 MD5 或仅使用 DES 有何不同?这就是我想知道的。

理论上 - 您可以使用纯 MD5 或 DES,但今天的计算机可以非常快速地猜出密码。

请注意 DES 和 MD5 今天已过时。可以在一分钟内在商品硬件上发现 MD5 冲突,而 DES 使用 64 位密钥,这对于今天被认为是安全的来说非常短。


小智 7

Java 加密基础设施中的 PBEWithMD5AndDES 是https://docs.oracle.com/javase/9​​/docs/specs/security/standard-names.html#cipher-algorithm-names中描述的算法。该算法是 PKCS#5 ( https://www.rfc-editor.org/rfc/rfc2898#section-6.1.1 )中描述的算法。

基本上,在第一步中,算法将密码转换为密钥。这称为密钥派生,并使用 MD5 作为“加扰”功能。输出提供适合 CBC 模式下 DES 的 IV 和密钥,用于第二步加密。

该算法不再安全,主要是因为 DES 仅使用 56 位密钥,这对于现代攻击来说太短了(例如https://crack.sh/)。尽管 MD5 容易发生冲突,但这实际上可能不是问题(冲突只会为给定密钥提供替代密码,但不会传送密钥)。