【发布时间】:2013-04-19 06:39:54
【问题描述】:
我有一个 PHP 脚本,它生成一些将用作许可证密钥的字符串:
function KeyGen(){
$key = md5(microtime());
$new_key = '';
for($i=1; $i <= 25; $i ++ ){
$new_key .= $key[$i];
if ( $i%5==0 && $i != 25) $new_key.='-';
}
return strtoupper($new_key);
}
$x = 0;
while($x <= 10) {
echo KeyGen();
echo "<br />";
$x++;
}
运行脚本一次后,我得到了这些:
8B041-EC7D2-0B9E3-09846-E8C71
C8D82-514B9-068BC-8BF80-05061
A18A3-E05E5-7DED7-D09ED-298C4
FB1EC-C9844-B9B20-ADE2F-0858F
E9AED-945C8-4BAAA-6938D-713ED
4D284-C5A3B-734DF-09BD6-6A34C
EF534-3BAE4-860B5-D3260-1CEF8
D84DB-B8C72-5BDEE-1B4FE-24E90
93AF2-80813-CD66E-E7A5E-BF0AE
C3397-93AA3-6239C-28D9F-7A582
D83B8-697C6-58CD1-56F1F-58180
我现在要做的是更改它,以便我有另一个函数来检查密钥是否已使用我的脚本生成。目前,我正在考虑将$key 设置为一个特定字符串的MD5(例如test),但当然,这会返回所有字符串相同。
谁能帮忙?
【问题讨论】:
-
您将这些密钥存储在哪里?
-
您正在散列一个“排序”随机值。如果不存储它并查看存储的密钥,您将无法知道它是否是由您的脚本生成的。另请注意,MD5 不会生成唯一值。你可能会得到 2 个相同的结果。并且使用微时间,在一个非常快的服务器上它可能会输出 10 个相同的键。 (或至少 2 个;))
-
@YogeshSuthar 这只是我在玩,试图学习 PHP。这些值不会永久存储在任何地方,只是作为
$mykey = KeyGen()存储一次。 -
@nvanesch 我也知道。谢谢你提到它:)
-
这很有趣..让我看看我能想出什么
标签: php security function license-key