Perl随机字符串,但在浏览器中使用时似乎不是那么随机
这让我疯了!我有一个需要创建随机ID的脚本,以便可以重命名该文件.这是我的测试:
for (my $i = 0; $i <= 100; $i++) { my $test = rand_id(); print "FOO: $testn"; } sub rand_id { # Used for the file names (not temp_id,for new adds) use String::Random qw(random_regex random_string); my $rand = random_regex("[a-zA-Z0-9]"x20); return $rand; } 这符合我的希望: root@admin:# perl test.cgi FOO: P2kyuotdlk04gcafvoze FOO: ZGC44tXfGFaiXeHsLZdn FOO: fydWFp1PW6iGYFaOfgvx FOO: xG4SPx2gLGPVeMJOupZ9 FOO: 6A2uD9hCF90VP7ybKjiA FOO: wT4fG8ogmV37Mkljs0gE FOO: 6QttcmlNjO1o9jCVht3g FOO: 9bAYYDd2NIjBWgAhsl3t FOO: hrU04kHvxu0JJYPHv6Jk FOO: 9EVL9GqGdWWZhDam6dc9 FOO: F0zruszqvmMOUumlO4Q1 FOO: KA9jOof9iSTxpDOWUMBl FOO: phicMiogMhZIcPZiXvj8 etc 所以好(没有重复). 然后我在我的脚本中有几乎相同的代码(只是不在循环中),但是当我继续从浏览器重新加载时,我得到: NEW: 0ab3K60sJSpHrvDVCKcR NEW: 0ab3K60sJSpHrvDVCKcR NEW: 0ab3K60sJSpHrvDVCKcR NEW: 0ab3K60sJSpHrvDVCKcR NEW: 0ab3K60sJSpHrvDVCKcR NEW: EyiYp5D6d8CL3vzozYFZ NEW: EyiYp5D6d8CL3vzozYFZ NEW: EyiYp5D6d8CL3vzozYFZ NEW: EyiYp5D6d8CL3vzozYFZ NEW: EyiYp5D6d8CL3vzozYFZ NEW: A0KUBiNSDcxyX7JQzBsk NEW: A0KUBiNSDcxyX7JQzBsk NEW: A0KUBiNSDcxyX7JQzBsk NEW: A0KUBiNSDcxyX7JQzBsk NEW: A0KUBiNSDcxyX7JQzBsk NEW: 7wU3RgK1Ho16rEjkGSsB NEW: 7wU3RgK1Ho16rEjkGSsB NEW: 7wU3RgK1Ho16rEjkGSsB 正如您所看到的,有很多重复的“随机”ID.我究竟做错了什么? 我正在使用的模块是http://search.cpan.org/~steve/String-Random-0.20/Random.pm,但是在做类似的事情时我遇到了同样的问题: my $rand = Digest::MD5::md5_base64( rand ); 解决方法
您可能会获得不合适的ID的原因有很多:
>服务器或浏览器可能正在缓存响应(在这种情况下不太可能,但总是值得调查). 如果您只是尝试生成没有任何安全属性的唯一ID,请使用现有的生成算法(例如UUID). 在紧要关头,您可以根据每个进程序列号的PID当前时间轻松生成此类ID: > PID在每台机器上是唯一的一段时间,通常是几小时(虽然可能在机器重新启动或pid_max较低时更少). 请注意,此类ID是可预测的,不应用于指定安全敏感数据.应用哈希函数不会添加任何保护,但可以方便地将ID列入固定宽度.当这些ID在多台计算机上必须唯一时,它们是不合适的. 如果您只是尝试生成临时文件,请使用现有模块,例如File::Temp. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |