O algoritmo de hash de senha é bastante simples e pode ser replicado em outras linguagens de programação.
De acordo com link , no MySQL 4.1 e superior, o PASSWORD
função leva o (binário) SHA1 da seqüência de senha, duas vezes, em seguida, retorna que como uma seqüência de caracteres hex precedida por um asterisco.
Por exemplo, no SQL:
> SELECT PASSWORD('test'), SHA1(UNHEX(SHA1('test')));
+-------------------------------------------+------------------------------------------+
| PASSWORD('test') | SHA1(UNHEX(SHA1('test'))) |
+-------------------------------------------+------------------------------------------+
| *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 | 94bdcebe19083ce2a1f959fd02f964c7af4cfc29 |
+-------------------------------------------+------------------------------------------+
Usar o código do MySQL no console derrota o propósito, mas aqui está um script Python bastante simples que solicita uma senha e gera uma string de senha compatível com o MySQL a partir dele.
import hashlib, getpass
def mysql_password(p):
return '*' + hashlib.sha1( hashlib.sha1(p).digest() ).hexdigest().upper()
password = getpass.getpass()
print(mysql_password(password))
Isso pode ser atribuído diretamente a um usuário no MySQL:
SET PASSWORD FOR 'dave'@'localhost' = '*94BDCE...';
Portanto, é apenas o hash de senha que é visto no histórico do console / MySQL. (Não é mais do que pode ser visto por qualquer pessoa com acesso à tabela mysql.user
.)