不同机器上的 crypt()

不同机器上的 crypt()

由于硬件问题,我需要迁移许多虚拟用户到新机器。他们的密码存储在 MySQL 中,并使用以下方式加密ENCRYPT最终使用crypt()

也许这是我的错,但salt 在存储密码时没有添加,所以它们是完全随机的。我的基本想法是转储数据库然后导入它。当我尝试将相同的字符串存储在同一台机器中时,ENCRYPT它给了我不同的结果。用户的密码可以在新机器上使用吗?

环境和加密方法更新:

  • 旧机器运行 Debian Etch 和 MySQL 5.0
  • 新机器将运行 Debian Squeeze 和 MySQL 5.1
  • 加密方式是MySQL默认的ENCRYPT
  • 原来没有加盐
  • 我不知道密码

感谢您的反馈,法布里克

答案1

从提供的链接到ENCRYPT()

如果没有给出 salt 参数,则使用随机值。

salt是一个 2 个字符的字符串,保存在加密文本的开头。例如,使用 salt='df' 加密字符串,'df' 位于输出产品的开头。

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

再举个例子,没有salt

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

现在使用前一个字符串的前两个字符作为salt

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

相同的输出。

您很可能不会遇到问题,但为了 100% 确定(加密实现是相同的),请在旧计算机上创建一个测试帐户并将其迁移到新计算机。检查密码是否适用于他们两个。

编辑:

salt总是存储在密码加密字符串的第一个字母中。有决不 salt丢失了,如果没有,salt用户首先将无法登录您的旧计算机。您不需要(也不应该)知道任何密码。

如果您要从 etch 迁移到 scrape,最明智的方法是使用 Debian Squeeze 设置测试服务器。您不需要硬件来执行此操作,例如设置 VirtualBox guest 虚拟机。然后在旧机器上创建一个新用户并将其帐户迁移到测试机器上。如果密码对两台机器都有效,那么您就可以开始了,这是 99.9% 确定的唯一方法。无论如何,测试迁移是必须的,您应该担心其中出现更多问题。

相关内容