2014-05-23 113 views
-1

请让我知道等效代码来解密。我使用这种编码方法加密了我的密码,现在我想现在解密。什么是等效解密代码

MessageDigest digest = MessageDigest.getInstance("MD5"); 
digest.update(password.getBytes()); 
BASE64Encoder encoder = new BASE64Encoder(); 
byte hashedBytes[] = (new String(digest.digest(), "UTF-8")).getBytes(); 
System.out.println(encoder.encode(hashedBytes)) 
+1

这是[如何解密SHA-256加密字符串?](http://stackoverflow.com/questions/9316437/how-to-decrypt-sha-256-encrypted-string)的重复,差异散列函数并不重要。此外,请阅读[散列密码和加密之间的区别](http://stackoverflow.com/questions/326699/difference-between-hashing-a-password-and-encrypting-it) –

+0

您应该阅读[如何安全地哈希密码?](http://security.stackexchange.com/questions/211/how-to-securely-hash-passwords)。它解释了为什么你不需要解密来验证密码,以及为什么MD5甚至SHA-2是密码哈希的不好选择。 – CodesInChaos

回答

1

简短的回答是你不能。 MD5是一个散列,这意味着理论上“加密”的数据不能被转换回原始数据。这是一个单向函数,(理论上)不能逆转。请阅读cryptographic hash functions了解更多信息。

这就好像您有机器通过返回书中的页数来处理书籍。你可以给它一本书,你会得到一个值回来,但仅给出这是不可能告诉什么在饲喂机输出


更多细节:

从维基百科对于密码散列函数页:

密码散列函数是散列函数,它任意数据块,并返回一个固定大小的位串,所述加密散列值,使得任何(意外或故意)改变数据将(以非常高的概率)改变散列值。

理想的加密哈希函数具有四个主要性能:

  • 它是容易计算的散列值对于任何给定消息
  • 是不可行的产生具有给定的散列的消息
  • 修改消息而不更改散列是不可行的
  • 找到两个具有相同散列的不同消息是不可行的。

注圆点。这意味着这将是有效不可能从哈希生成密码。当然,MD5被认为是密码不安全的,但它仍然意味着没有从散列到输入的一般方法。

相关问题