Я в настоящее время кодирую пароль. Я должен расшифровать пароль. Вот код для кодирования. Я пытаюсь получить оригинальный пароль, сравнить его. Я исследовал MessageDigest, который говорит, что это односторонний метод. Не уверен, как получить оригинальное сообщение. У нас есть метод декодирования, но он не дает мне исходный пароль - Base64.decode.
public static synchronized String getMD5_Base64(String input) {
if (!isInited) {
isInited = true;
try {
digest = MessageDigest.getInstance("MD5");
} catch (Exception ex) {
}
}
if (digest == null)
return input;
// now everything is ok, go ahead
try {
digest.update(input.getBytes("UTF-8"));
} catch (java.io.UnsupportedEncodingException ex) {
}
byte[] rawData = digest.digest();
byte[] encoded = Base64.encode(rawData);
String retValue = new String(encoded);
return retValue;
}
}
Алгоритм хеширования MD5, как и все алгоритмы хеширования, односторонний. Единственный способ восстановить исходный пароль - это попробовать все возможности, пока вы не получите тот, чей хэш MD5 совпадает с полученным вами.
Вы не можете получить оригинальный пароль. Помните, что дайджест и кодирование Base64 делают две совершенно разные вещи. Дайджест MD5 создает криптографический хэш предоставленных ему данных. Это необратимо. Base64 - это механизм кодирования для преобразования данных (которые могут содержать непечатаемые двоичные данные) в строку, которая гарантированно содержит только печатаемые символы. Этот шаг является обратимым.
Стандартный способ проверки пароля не заключается в декодировании оригинального пароля и сравнении открытого текста. Что вам нужно сделать, так это использовать кодирование (MD5-хэш, затем Base64-кодирование), которое вы выполнили для исходного пароля, и применить его к новому паролю. Затем сравните сохраненную кодированную версию с новой кодированной версией. Если они одинаковы, значит, пароли совпали.
Такая конструкция является более безопасным механизмом, чем хранение паролей, которые могут быть расшифрованы. Таким образом, если кто-то украдет вашу базу данных паролей, он не получит автоматически доступ ко всем паролям ваших пользователей. Для того чтобы взломать систему, им все равно придется найти пароль, который кодируется в то же значение. Смысл криптографических хэшей типа MD5 в том, чтобы сделать это очень сложным. С другой стороны, MD5 уже не считается очень надежным хэшем. Лучше использовать SHA1 или SHA256 (но помните, что вы не сможете изменить существующие сохраненные пароли с их MD5-хэша на другой хэш без оригинального пароля, которого у вас нет, т.е. вы не сможете просто преобразовать вашу базу сохраненных паролей).
Если вы пытаетесь сравнить содержимое нового пароля со старыми паролями, вы не можете использовать хэш MD5 . Как заметил Джерико, MD5 (и все хэши) односторонние, что означает, что вы не можете получить исходный текст.
Для сравнения вам нужно будет где-то сохранить исходное значение пароля. Лучшим способом, вероятно, является шифрование (и результат в формате base64) перед сохранением его в базе данных. Затем, чтобы провести сравнение, вы расшифровываете каждое из значений и выполняете нужную работу
. Одно важное замечание состоит в том, что хранение паролей пользователей в любой форме, которая может быть изменена, может быть опасным, если не будет выполнено должным образом.