crypt () em máquinas diferentes

1

Por causa de um problema de hardware, eu preciso migrar muitos usuários virtuais para uma nova máquina. Suas senhas armazenadas no MySQL são criptografadas com ENCRYPT que usa crypt() eventualmente.

Talvez seja minha culpa, mas salt não foi adicionado quando as senhas foram armazenadas, então elas são totalmente aleatórias. Minha idéia básica era despejar o banco de dados e depois importá-lo. Quando tentei armazenar a mesma string na mesma máquina com ENCRYPT , obtive resultados diferentes. As senhas dos usuários funcionarão na nova máquina?

Atualize o ambiente e o método de criptografia:

  • A máquina antiga está rodando o Debian Etch com o MySQL 5.0
  • A nova máquina irá executar o Debian Squeeze com o MySQL 5.1
  • O método de criptografia é o padrão do MySQL ENCRYPT
  • O sal não foi adicionado originalmente
  • Eu não sei as senhas

Obrigado pelo seu feedback, fabrik

    
por fabrik 14.04.2011 / 13:20

1 resposta

7

Do link fornecido para ENCRYPT()

If no salt argument is given, a random value is used.

salt é uma sequência de 2 caracteres, salva no início do texto criptografado. por exemplo. criptografar uma string com salt = 'df', 'df' está no início do produto de saída.

mysql> SELECT ENCRYPT('hello','df');
+-----------------------+
| ENCRYPT('hello','df') |
+-----------------------+
| dfbVa429UeC0U         | 
+-----------------------+
1 row in set (0.00 sec)

Outro exemplo, não há salt

mysql> SELECT ENCRYPT('hello');
+------------------+
| ENCRYPT('hello') |
+------------------+
| oBSydDfeNx5ug    | 
+------------------+
1 row in set (0.00 sec)

Agora, use os dois primeiros caracteres da string anterior como salt

mysql> SELECT ENCRYPT('hello','oB');
+-----------------------+
| ENCRYPT('hello','oB') |
+-----------------------+
| oBSydDfeNx5ug         | 
+-----------------------+
1 row in set (0.00 sec)

Mesma saída.

Você provavelmente não terá um problema, mas apenas para ter 100% de certeza (que a implementação da cripta é a mesma), crie uma conta de teste na máquina antiga e migre-a para a nova. Verifique se a senha funciona para os dois.

EDITAR:

salt é SEMPRE armazenado nas primeiras letras da string criptografada da senha. Não há NO WAY salt perdido, sem que salt usuários possam fazer login em sua máquina antiga. Você não precisa (e você não deveria) conhecer senhas.

Se você está migrando do etch para o squeeze, a maneira mais sensata de ir é configurar um servidor de teste com o Debian Squeeze. Você não precisa de hardware para fazer isso, configure um convidado do VirtualBox, por exemplo. Em seguida, crie um novo usuário em sua máquina antiga e migre a conta dele para a máquina de teste. Se a senha funciona para ambas as máquinas, então é bom ir, é a única maneira de ter 99,9% de certeza. O teste de migrações é uma obrigação de qualquer forma, você deve se preocupar com muito mais problemas aparecendo neles.

    
por 14.04.2011 / 14:05