我发送了一个加密密码(以md5为单位)到sql数据库。无意中,我发送了md5加密到整数列。我输入的密码是“test”,在我的数据库中显示为“5”然后我输入了“qwertyqwerty”的密码,它显示为“2147483647”。出于好奇,任何人都可以向我解释这是怎么回事?为什么int值差异很大?
答案 0 :(得分:1)
MD5不会对密码进行加密,而是对其进行哈希处理。
散列是一种单向函数,它接受给定的输入并创建可预测的输出(即,给定的输入将始终具有相同的输出),理想情况下即使非常相似的输入也会产生非常不同的输出。 / p>
MD5哈希值为128位。如果您尝试将这128位写入32位SQL列,则肯定会发生一些截断。
如果不了解用于生成MD5的特定代码,将其转换为整数,然后将其写入SQL,则无法理解为什么在一种情况下你得到一个小数字,而在另一种情况下你得到了最大值signed int的值。如果你想发布代码,我很乐意发表评论。
答案 1 :(得分:0)
我不能说为什么第一个值显示为5(我必须看到哈希值),但是你的第二个值显示为它所做的,因为这是整数列可以容纳的最大值。
当mysql将您的字符串MD5哈希转换为整数(或尝试)时,它超过了整数可以容纳的最大值,因此它保存了最大整数。