Получение пароля, когда пароль, сохраненный как значение хэш-функции

Я использую nXhtml для emacs. Цитирование со страницы

Одной из основных частей nXhtml является nxhtml-mode, основной режим GNU Emacs, основанный на nxml-режиме. Он знает о синтаксисе XHTML и может проверять это по мере ввода. Он также может сказать вам, какие теги и атрибуты вы можете использовать в определенный момент, и поможет вам вставить их.

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

5
задан Matt 18 June 2009 в 16:04
поделиться

8 ответов

Если вы храните только хеш пароля, то нет. ... и в любом случае вам следует хранить только хеш-код их паролей с надлежащей солью.

Механизмы сброса пароля - подходящая альтернатива.

30
ответ дан 18 December 2019 в 05:13
поделиться

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

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

10
ответ дан 18 December 2019 в 05:13
поделиться

In short, no. With most hashing algorithms, you can have multiple inputs with the same output. It is often better to offer a password reset option.

7
ответ дан 18 December 2019 в 05:13
поделиться

Существуют различные типы алгоритмов хеширования. Некоторые из них более безопасны, чем другие. MD5 - популярный, но небезопасный. Семейство SHA - еще один более безопасный набор алгоритмов.

По определению, хеш - это односторонняя функция. Это не может быть отменено.

http://en.wikipedia.org/wiki/Sha-1

3
ответ дан 18 December 2019 в 05:13
поделиться

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

Как уже упоминалось, используйте другие методы восстановления пароля. На самом деле никогда не бывает веских причин для доступа к паролям в открытом виде.

Если хеш-коды на двух сайтах одинаковы, пользователь, скорее всего, имеет одинаковый пароль на обоих. Однако не на 100% гарантировано, что может произойти конфликт хеширования, но это крайне маловероятно.

3
ответ дан 18 December 2019 в 05:13
поделиться

Невозможно отменить часто используемые хэши. Они могут быть подвергнуты грубой силе (перебор всех возможных паролей) или вы можете использовать список слов (с использованием списка часто используемых паролей) в сочетании с грубой силой, чтобы немного ускорить его, но это все еще очень медленный и интенсивный процесс. 1289] Лучший способ, который используют многие сайты, - это создать кнопку «Сброс пароля», где вы вводите свое имя пользователя и адрес электронной почты, и если они совпадают,

2
ответ дан 18 December 2019 в 05:13
поделиться

Общая идея хранения хэша пароля заключается в обеспечении безопасности паролей ... даже от тех, кто имеет доступ к базе данных. Доверие никогда не бывает безоговорочным. Хэш - это односторонний алгоритм, поэтому невозможно получить исходный пароль из хэш-кода. Обычно, когда пользователю необходимо восстановить свой пароль, который был сохранен в виде хэша, вы должны задать ему секретный вопрос и либо отправить им временный пароль по электронной почте, либо отправить им временную ссылку, по которой они могут изменить свой пароль. Это гарантирует, что пароль никогда не будет храниться в открытом виде и будет защищен от посторонних глаз, даже тех, кому можно доверять.

-1
ответ дан 18 December 2019 в 05:13
поделиться

Для этого у вас должна быть модель с полями:

Hashed_password
Salt

И вам нужно знать пользователя метода для хеширования пароля (здесь я использую SHA1) Затем вы можете определить в своем контроллере:

def self.encrypted_password(password, salt)
   string_to_hash = password + "wibble" + salt
   Digest::SHA1.hexdigest(string_to_hash)
end

Затем вы можете сравнить:

user.Hashed_password == encrypted_password(password, user.salt)

Истина означает, что «пароль» - это пароль для пользователя «пользователь»

0
ответ дан 18 December 2019 в 05:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: