【问题标题】:How to decrypt the value如何解密值
【发布时间】:2011-02-01 11:18:12
【问题描述】:

其实我想从加密后的密码中取回密码。

密码加密如下:

MessageDigest md = MessageDigest.getInstance("SHA");
md.reset();
byte[] encryptedBinarySource = md.digest(source.getBytes("UTF-8"));

如何解密encryptedBinarySource的值?

【问题讨论】:

  • 你不能。这就是digest 的全部意义所在。无论输入大小如何,输出大小都是固定的,而且很小……所以在这个过程中会丢失很多信息。
  • 不仅是你,还有很多破解者都想这么做。如果您需要比较某个值,请加密(消化)您要比较的值..然后与加密的密码进行比较:) 那是唯一的方法。 请不要改变主意,在这个问题上使用字符串纯密码
  • 但是,如果您可以尝试使用不同的输入获得相同的输出,则依靠 SHA 冲突...也许使用字典...这就是使用盐的原因。而这也是一个难题……

标签: java encryption digest-authentication cryptographic-hash-function


【解决方案1】:

你不能。 SHA 是一种单向加密。能够解密它会破坏它的唯一目的。而是使用双向加密算法。或者,如果它打算在您的情况下加密密码等敏感信息,那么您应该以相同的方式加密新输入的密码,并将其结果与您存储在某处的原始加密密码进行比较。

然而,有所谓的rainbow tables 使您(和黑客!)能够根据哈希揭示原始值。然而,对于 SHA 而言,成功匹配的机会远低于 MD5。

【讨论】:

    【解决方案2】:

    您无法解密哈希。哈希是一种单向函数。哈希密码确实用于不存储实际密码(您将用户引入的密码哈希并与存储的哈希进行比较)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多