-1

我正在向 sql 数据库发送加密密码(在 md5 中)。意外地,我向整数列发送了 md5 加密。我输入的密码是“test”,在我的数据库中显示为“5”,然后我输入了“qwertyqwerty”的密码,显示为“2147483647”出于好奇,谁能向我解释这是怎么回事? 为什么 int 值如此不同?

4

2 回答 2

1

MD5 不对密码进行加密,而是对其进行哈希处理。

哈希是一种单向函数,它接受给定的输入并创建可预测的输出(即,给定的输入将始终具有相同的输出),理想情况下,即使非常相似的输入也会产生截然不同的输出。

MD5 哈希是 128 位。如果您尝试将这 128 位写入 32 位 SQL 列,肯定会发生一些截断。

如果不了解用于生成 MD5 的特定代码,将其转换为整数,然后将其写入 SQL,就无法理解为什么在一种情况下你得到一个小数字,而在另一种情况下你得到一个最大值签名 int。如果您想发布代码,我很高兴对此发表评论。

于 2012-04-11T23:06:12.493 回答
0

我不能说为什么第一个值显示为 5(我必须查看散列),但您的第二个值显示为它所做的,因为这是整数列可以容纳的最大值。

当 mysql 将您的字符串 MD5 哈希转换为整数(或尝试)时,它超过了整数可以容纳的最大值,因此它保存了最大整数。

于 2012-04-11T23:07:13.660 回答