public static String encryptPassword( String password ) {
String encrypted = "";
try {
MessageDigest digest = MessageDigest.getInstance( "MD5" );
byte[] passwordBytes = password.getBytes( );
digest.reset( );
digest.update( passwordBytes );
byte[] message = digest.digest( );
StringBuffer hexString = new StringBuffer();
for ( int i=0; i < message.length; i++)
{
hexString.append( Integer.toHexString(
0xFF & message[ i ] ) );
}
encrypted = hexString.toString();
}
catch( Exception e ) { }
return encrypted;
}
我正在使用Java。我使用这种方法来散列密码,并且在存储到数据库时它正确工作。现在我对解密有困难。有没有比这个方法更有效的方法?
答案 0 :(得分:12)
你不能解密它。 MD5是hash - 它是单向的,与双向加密算法不同。
您通常不应该尝试来解密密码 - 您存储哈希(盐渍,理想情况下),然后将“已知良好”哈希值与给您的密码哈希值进行比较用户以后。
(这些天我个人会避免使用MD5,但这是另一个故事。)
答案 1 :(得分:5)
MD5是hash function,即单向函数。无法“解密”MD5代码。
虽然对加密应用程序没用,但哈希码通常用于以下应用程序:
如果您必须 ... [存储密码以便以后可以检索它们]和BTW,有许多用例需要这样做(例如提供给第3个派对网站代表您的应用程序的各种用户等登录。)...
...你应该使用诸如Blowfish,DES,AES之类的encryption algorithm(我在这里只提到对称密钥加密,因为虽然也可以使用公钥加密,但它不会出现这就是我们所需要的。)
请务必仔细阅读有关加密和加密的内容,因为实现不非常安全的加密 - 解密应用程序相对容易:-(还要记住算法只有一个整个链中的元素(通常是“更容易”的元素)。