2010-10-04 3 views
3

У меня есть модель пользователя в моем приложении, а в моем поле пароля используется sha1. Я хочу, когда я получу sha1 из БД, чтобы снова создать строку. Как мне это сделать?Преобразование SHA1 обратно в строку

+0

Возможный дубликат [Декодирование строки sha1 для нормальной строки] (http://stackoverflow.com/questions/3492317/decode-sha1-string-to-normal-string) –

ответ

10

Вы не можете - SHA1 является односторонним хэшем. Учитывая выход SHA1 (X), не представляется возможным получить X (по крайней мере, не без перебора или dictionary/rainbow table сканирования)

очень простой способ думать об этом, можно представить, я даю вам набор трехзначных чисел, чтобы добавить, и вы сообщите мне последние две цифры этой суммы. Из этих двух цифр я не могу точно определить, с каких номеров вы начали.

Смотрите также

мысли в отношении MD5, эти и другие вопросы могут также просветить вас:

0

SHA - алгоритм хеширования. Вы можете сравнить хэш вводимого пользователем ввода с сохраненным хэшем, но вы не можете легко выполнить процесс (перестроить исходную строку из сохраненного хэша).

Если вы не выбрали грубую силу или не использовали таблицы радуги (оба очень медленные, если они снабжены достаточно длинным вводом).

1

Вы не можете - это точка SHA1, MDB5 и т. Д. Большинство из них - однонаправленные хэши для обеспечения безопасности. Если это может быть отменено, то любой, кто получил доступ к вашей базе данных, может получить все пароли. Это было бы плохо.

Вместо дешифрования вашей базы данных вместо хэш попытка пароля и сравнить это с хешированным значением в базе данных.

+0

Это именно то, что я делаю, я просто пытался чтобы проверить изменения пароля, но не можете их не использовать, просто войдите в систему и выйдите из системы, чтобы увидеть это, т. – onildo

+0

. Вы можете проверить, изменил ли пользователь свой пароль или нет, сравнив хэши, но с точки зрения проверки того, был ли пароль длиннее или короче и т. д., что невозможно, если вы используете SHA1. –

0

Если вы говорите об этом с практической точки зрения, просто бросьте сейчас и считайте это невозможным. Поиск исходной строки есть невозможно (за исключением случайно). Большая часть криптографически защищенного хэша заключается в том, что вы не можете найти ни одну строку, которая также создает тот же хеш.

Если вы заинтересованы в исследовании безопасных алгоритмов хеширования: поиск a Строка, которая будет выдавать заданный хэш, называется «прообразом». Если вам удастся это сделать (с разумной вычислительной сложностью) для SHA-1, вы, вероятно, станете разумно известным среди исследователей криптоанализа. Лучший «перерыв» против SHA-1, который в настоящее время известен, - это способ найти две строки ввода, которые производят один и тот же хеш, но 1) он является довольно дорогостоящим (подумайте о количестве машин, работающих 24/7 в течение нескольких месяцев при время, чтобы найти одну такую ​​пару), и делает не работает для произвольного хеш-значения - он находит один из специальных классов входных строк, для которых сопоставимая пара (относительно) легко найти.

0

Вы не можете сделать это с помощью SHA-1. Но, учитывая то, что вам нужно сделать, вы можете попробовать использовать AES. AES позволяет шифровать и расшифровывать.

+0

Мне не нужно расшифровывать поле, я просто хотел проверить, было ли это правильно, но я забыл, что я только что вошел в систему, я бы знал, правильно ли пароль. <. – onildo

Смежные вопросы