什么是PBEWithMD5AndDes?

时间:2019-01-11 09:11:04

标签: java encryption

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

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

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

在线上没有太多资源可以很好地解释这种“算法”。

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

3 个答案:

答案 0 :(得分:3)

扩展上一个答案

  

PBEWithMD5AndDes作为算法到底意味着什么?

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

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

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

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

  

仅使用MD5或仅使用DES有何区别?这就是我想知道的。

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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容易发生冲突,这里实际上也不是问题(冲突只会为给定的密钥提供替代密码,但不会传达密钥)。