为什么MySQL的ENCRYPT会在每次调用时返回不同的结果?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么MySQL的ENCRYPT会在每次调用时返回不同的结果?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1718字,纯文字阅读大概需要3分钟。
内容图文
我有一个ugly server issue,我试图不忽略任何细节.
我的虚拟电子邮件用户密码存储在MySQL的ENCRYPT功能中.我的基本想法是我将从旧机器转储我的虚拟用户表,然后将其导入新机器.
只是为了仔细检查我试图再次存储带有ENCRYPT的字符串,并且存储的数据不同.这是否意味着我不能像我想的那样导出/导入我的用户?
解决方法:
Datajam已经描述的内容是正确的.这是一些进一步的解释.
如果不向ENCRYPT()函数提供salt,则会生成随机的盐并用于加密字符串. salt只有两个字节/字符.
首先,我将演示如果我使用相同的字符串运行ENCRYPT()两次,它将给出不同的值(因为随机盐不同)
mysql> SELECT ENCRYPT('hello');
+------------------+
| ENCRYPT('hello') |
+------------------+
| 5Q5CiJWj4GItY |
+------------------+
1 row in set (0.02 sec)
mysql> SELECT ENCRYPT('hello');
+------------------+
| ENCRYPT('hello') |
+------------------+
| 7QHPY3iSLVdas |
+------------------+
1 row in set (0.00 sec)
现在,如果我使用最后一个条目并再次使用我们已经作为salt的值尝试ENCRYPT(),我们将得到相同的结果:
mysql> SELECT ENCRYPT('hello', '7QHPY3iSLVdas');
+-----------------------------------+
| ENCRYPT('hello', '7QHPY3iSLVdas') |
+-----------------------------------+
| 7QHPY3iSLVdas |
+-----------------------------------+
1 row in set (0.00 sec)
只是为了证明如果我们得到相同盐的字符串(密码)错误,我们将获得不同的值.请注意,在此示例中,两个第一个字符(只是盐)保持不变.
mysql> SELECT ENCRYPT('helloX', '7QHPY3iSLVdas');
+------------------------------------+
| ENCRYPT('helloX', '7QHPY3iSLVdas') |
+------------------------------------+
| 7QKDSis4DZnCU |
+------------------------------------+
1 row in set (0.01 sec)
使用此信息,您应该尝试运行ENCRYPT()函数,两个MySQL服务器指定相同的salt,您应该得到相同的结果.如果没有,那么crypt()的实现可能在两者之间有所不同.
内容总结
以上是互联网集市为您收集整理的为什么MySQL的ENCRYPT会在每次调用时返回不同的结果?全部内容,希望文章能够帮你解决为什么MySQL的ENCRYPT会在每次调用时返回不同的结果?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。