Pergunta

Os usuários podem solicitar que sua senha seja enviada para si, se a senha é armazenada como um valor de hash?

Existe alguma maneira de converter um valor de hash para o valor de texto claro com a informação adequada (e que informação que você precisa)?

Se um usuário tem o mesmo valor hash de senha armazenados em dois locais, seria a sua senha ser a mesma para ambos os sites?

Foi útil?

Solução

Se você está armazenando apenas uma hash da senha, então não. ... e você só deve estar armazenando um hash corretamente-salgado de sua senha, de qualquer maneira.

mecanismos de redefinição de senha são a alternativa adequada.

Outras dicas

senhas hash não podem ser recuperadas em geral (isso depende da função hash, hashes seguros não podem ser recuperados). Se eles têm o mesmo hash em dois sites, eles poderiam ter a mesma senha, isso depende do sal de hash usado pelos sites, que método etc.

Se a sua senha é armazenada de forma segura em um bom sistema de hashing, um provedor nunca deve ser capaz de enviar e-mail com sua senha, você deve redefinir sua senha se você esquecê-lo.

Em suma, não. Com a maioria dos algoritmos de hash, você pode ter várias entradas com o mesmo resultado. Muitas vezes, é melhor para oferecer uma opção de redefinição de senha.

Existem diferentes tipos de algoritmos de hash. Alguns são mais seguros do que outros. MD5 é um popular, mas inseguro. O SHA-família é um outro conjunto mais seguro de algoritmos.

Por definição, um hash é uma função de uma maneira. Ele não pode ser revertida.

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

Se houvesse uma maneira simples de recuperar a senha de texto claro, não haveria nenhum ponto em hash das senhas para começar. Nesse ponto você pode muito bem base64 ou ROT13-los. (Não faça isso!)

Como os outros mencionados, utilize outros métodos de recuperação de senha. Há realmente não é uma boa razão para ter acesso a senhas em texto simples.

Se o hash em dois locais é o mesmo, o usuário provavelmente tem a mesma senha em ambos. Não é 100% garantida no entanto, poderia haver uma colisão de hash, mas que é extremamente improvável.

Não há nenhuma maneira de reverter os hashes comumente usados. Eles podem ser bruteforced (tentar cada senha possível) ou você pode usar uma lista de palavras (usando uma lista de senhas comumente usados) em combinação com a força bruta para acelerá-lo um pouco, mas ainda é um processo intensivo muito lento e CPU.

A melhor maneira, que muitos sites de usar, para criar um botão "Password Reset" onde você digita seu nome de usuário e e-mail, e se eles corresponderem, ele envia-lhe uma senha aleatória e dá-lhe um link para a página de login e você pode fazer o login com a senha aleatória e alterar sua senha.

Para fazer isso você deve ter um modelo com os campos:

Hashed_password
Salt

E você precisa saber o usuário método para hash de senha (Aqui eu uso SHA1) Em seguida, você pode definir em seu controlador:

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

Em seguida, você pode comparar:

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

meios verdade que "senha" é a senha para o usuário "user"

A idéia geral por trás armazenar um hash de uma senha é garantir as senhas são seguras ... mesmo de quem tem acesso ao banco de dados. Confiança nunca é implícito. Um hash é um algoritmo one-way, então não há nenhuma maneira de obter a senha original a partir de um código hash. Normalmente, quando um usuário precisa recuperar sua senha que foi armazenado como um hash, você deve perguntar-lhes a sua pergunta secreta, e quer enviá-las a sua senha temporária, ou enviá-las um link temporário onde eles podem alterar sua senha. Isso garante que a senha nunca é armazenado texto claro, e é seguro contra todos os olhares indiscretos, mesmo aqueles que pode ser considerado como confiável.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top