我已经看到这个问题了很多但从未见过真正的具体答案.所以我将在这里发布一个,希望能帮助人们理解为什么在使用随机数生成器时会出现"模数偏差",就像rand()在C++中一样.
我想生成忘记密码的标识符.我读过我可以通过使用带有mt_rand()的时间戳来做到这一点,但有些人说时间戳可能不是每次都是唯一的.所以我在这里有点困惑.我可以使用时间戳吗?
问题
生成自定义长度的随机/唯一标记的最佳做法是什么?
我知道这里有很多问题,但是在阅读了不同的人的不同意见后,我变得更加困惑.
我最近遇到了一个系统,其中所有的数据库连接都是由各种方式模糊的例程管理的,包括base 64编码,md5sums和各种其他技术.
这只是我,还是这种矫枉过正?有哪些替代方案?
我想创建一个令牌生成器,它生成用户无法猜到并且仍然是唯一的令牌(用于密码重置和确认码).
我经常看到这段代码; 是否有意义?
md5(uniqid(rand(), true));
Run Code Online (Sandbox Code Playgroud)
根据评论 uniqid($prefix, $moreEntopy = true)收益率
前8个十六进制字符= Unix时间,最后5个十六进制字符=微秒.
我不知道如何$prefix处理参数..
因此,如果您未将$ moreEntopy标志设置为true,则会提供可预测的结果.
问: 但是如果我们用uniqid用$moreEntopy,有什么用MD5哈希它买我们?它比以下更好:
md5(mt_rand())
Run Code Online (Sandbox Code Playgroud)
edit1:我将此令牌存储在具有唯一索引的数据库列中,因此我将检测列.可能有兴趣/
我是laravel 5的新手.我正在开发一个项目,我希望为每个应用程序分配一些随机可读的唯一字符串.我知道可以用作种子的每个应用程序ID.由于该应用程序将在公司内使用,我不担心安全性.我希望表的大小能够增长,所以我的目标是尽可能地实现唯一性,因为DB中的字段是唯一的.像(EN1A20,EN12ZOV等)的代码.如果函数可以允许我传递我想要返回的字符串的长度,那真的很棒.
编辑 下面显示的是我对此问题的尝试
private function generate_app_code($application_id) {
$token = $this->getToken(6, $application_id);
$code = 'EN'. $token . substr(strftime("%Y", time()),2);
return $code;
}
private function getToken($length, $seed){
$token = "";
$codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$codeAlphabet.= "0123456789";
mt_srand($seed); // Call once. Good since $application_id is unique.
for($i=0;$i<$length;$i++){
$token .= $codeAlphabet[mt_rand(0,strlen($codeAlphabet)-1)];
}
return $token;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码可以解决这个问题吗?
编辑
实际上我从这篇文章中借用了一些想法PHP:如何生成一个随机的,唯一的,字母数字字符串?提出上述方法但该帖子并未完全解决我的问题.我的目标是生成一个长度为6到8的字符串(字母数字和可读).我的管理员将使用此字符串进行查询.在我的函数中,我有mt_srand($ seed)来种子随机数生成器,其中seed是我的application_id.可以获得重复的$ token.
感谢帮助.
可能重复:
PHP:如何生成随机,唯一,字母数字字符串?
试着像http://imgur.com/t4Syk一样获得smth 我们知道imgur使用5个区分大小写的字符串来表示图像.怎么做?
我正在从以下字符生成一个6位数的代码.这些将用于在贴纸上盖章.
它们将分批生成10k或更少(打印前),我不认为总计将超过1-2百万(可能更少).
生成批量代码后,我将检查现有代码的MySQL数据库,以确保没有重复.
// exclude problem chars: B8G6I1l0OQDS5Z2
$characters = 'ACEFHJKMNPRTUVWXY4937';
$string = '';
for ($i = 0; $i < 6; $i++) {
$string .= $characters[rand(0, strlen($characters) - 1)];
}
return $string;
Run Code Online (Sandbox Code Playgroud)
如何创建随机文本字符串以用于文件名?
我正在上传照片并在完成后重命名.所有照片都将存储在一个目录中,因此它们的文件名必须是唯一的.
有这样做的标准方法吗?
有没有办法在尝试覆盖之前检查文件名是否已经存在?
这是为了一个单一的用户环境(我自己)在我的网站上显示我的个人照片,但我想自动化一点.我不需要担心两个用户同时尝试上传和生成相同的文件名,但我确实想检查它是否已经存在.
我知道如何上传文件,我知道如何生成随机字符串,但我想知道是否有一种标准的方法.
可能重复:
PHP:如何生成随机,唯一,字母数字字符串?
我正在尝试生成唯一的id(字母数字字符串).我正在使用当前的时间戳.我有两个问题:
md5(stamp1)来自不同的md5(stamp2)如果stamp1 != stamp2.PS:最简单的原因是将邮票作为身份证.我仍然不希望很容易找出如何生成id
任何人都可以描述我如何使用开发人员密钥、应用程序 ID 和用户名在 php 中生成令牌。Videyo 只提供 html js,他们对 php 没有任何支持。请提示我。令牌长度为 200+。
可能重复:
PHP:如何生成随机,唯一,字母数字字符串?
我想为随机长度[4-6]个字符生成随机令牌[字母数字].
有人可以帮忙吗?
我正在开发一个移动应用程序,它必须访问外部webapp(PHP + Codeigniter)来管理ajax查询的操作.
所以通过这种方式,存在一个问题.如果有人看到使用的URL,可以删除行,或从数据库修改用户的信息.所以我想在这个系统中没有这个:
成功登录后,我会这样做:
// getToken : https://stackoverflow.com/a/13733588/2154101
$this->session->set_userdata('private_token', getToken(50));
$public_token = getToken(50);
$this->session->set_userdata('secure_token', md5("$private_token:$public_token"));
$data['token'] = $public_token;
// some stuff ...
// send $data in JSON
Run Code Online (Sandbox Code Playgroud)
然后客户端将在下一个查询中使用公共令牌,我将在服务器上执行此操作:
$public_token = $this->input->post('token');
$data['token'] = get_public_token($public_token);
// some stuff ...
// send $data in JSON
Run Code Online (Sandbox Code Playgroud)
get_public_token使用此代码的助手位于何处:
public get_public_token($public_token) {
$last_secure_token = $this->session->userdata('secure_token');
$private_token = $this->session->userdata('private_token');
$actual_token = md5("$private_token:$public_token");
if ($actual_token === $last_secure_token) {
$public_token = getToken(50);
$this->session->set_data('private_token', getToken(50));
$this->session->set_data('secure_token', md5("$private_token:$public_token"));
return $public_token;
} else { // you are cheating me …Run Code Online (Sandbox Code Playgroud) 如何在PHP中生成一个包含大写字母和数字的10个字符的随机字符串,这些字符串永远不会被复制或被复制的可能性最小?例如:34KJ2SCFPS
如果我只考虑数字,那么可以$randon = time();重复吗?随着时间每毫秒都在变化,我认为这是不可能的。还有机会吗?
php ×11
random ×6
security ×3
image ×2
token ×2
algorithm ×1
c++ ×1
codeigniter ×1
cross-domain ×1
encryption ×1
file-rename ×1
hash ×1
key ×1
laravel-5 ×1
modulo ×1
optimization ×1
passwords ×1
permutation ×1
string ×1
timestamp ×1
upload ×1
vidyo ×1