【发布时间】:2017-12-13 17:07:48
【问题描述】:
我想知道 BigInt 的大小是否足够。 我创建了一个registration.php,用户会在其中收到一个帐户激活链接,点击以验证他的电子邮件,这样他的帐户就会被激活。
帐户激活链接采用以下格式:
[php]
$account_activation_link =
"http://www.".$site_domain."/".$social_network_name."/activate_account.php?primary_website_email=".$primary_website_email."&account_activation_code=".$account_activation_code."";
[/php]
帐户激活码采用以下格式:
$account_activation_code = sha1( (string) mt_rand(5, 30)); //Type 在sha1的第一个参数上将INT转换为STRING,因为它需要是一个字符串。
现在,以下链接已通过电子邮件发送: http://www.myssite.com/folder/activate_account.php?primary_website_email=my.email@gmail.com&account_activation_code=22d200f8670dbdb3e253a90eee5098477c95c23d
注意 sha1 生成的帐户激活码: 22d200f8670dbdb3e253a90eee5098477c95c23d
但在我的 mysql 数据库中,在“account_activation_code”列中,我只看到: “22”。激活码的其余部分丢失。这是为什么 ? 该列设置为 BigInt。这还不足以容纳 Sha1 生成的代码吗? 你有什么建议?
谢谢
【问题讨论】:
-
IIRC,MySQL 的
BigInt— 64 位长,但 SHA1 是 160 位长。 -
@PetSerAl SHA1 也是一个字符串,而不是一个整数
-
@watzon 这取决于您如何表示它。完全有可能将哈希值表示为单个数字,因为您有一个类型来表示那个大数字。 MySQL 的
BigInt不够大。 -
@PetSerAl 只是让 BigInt 更大是行不通的,也不能真正解决他的根本问题。为了使 SHA1 散列成为整数,您必须转换基数。只需更改为 VARCHAR 即可解决更大的问题
-
@watzon SHA1 是二进制的。人们只是习惯于看到它的“十六进制编码”转储,因为它更容易阅读。