关于Java:什么是PBEWithMD5AndDes?

What is PBEWithMD5AndDes?

我正在学习Java中的加密算法,偶然发现了该算法:

1
2
  SecretKey key = SecretKeyFactory.getInstance(
                   "PBEWithMD5AndDES").generateSecret(keySpec);

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

网上没有太多资源可以很好地解释此"算法"。

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


扩展上一个答案

what exactly does PBEWithMD5AndDes means as an algorithm?

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

1
KeySpec pbeSpec = new PBEKeySpec(password.toCharArray(), psswdSalt, PBKDF_INTERATIONS, SYMMETRIC_KEY_LENGTH)

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

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

How does that differ with just using MD5 or just DES? That's what i would like to know.

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

请注意,DES和MD5今天已过时。在商用硬件上不到一分钟的时间就可以发现MD5冲突,而DES正在使用64位密钥,这在当今看来已经很安全了。


PBE代表"基于密码的加密",一种从密码(文本)派生加密密钥(二进制数据)的方法。


Java密码基础结构中的

PBEWithMD5AndDES是https://docs.oracle.com/javase/9??/docs/specs/security/standard-names.html#cipher-algorithm-names中描述的算法。该算法是PKCS#5(https://tools.ietf.org/html/rfc2898#section-6.1.1)中描述的算法。

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

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