【问题标题】:Random string: does php str_shuffle add entropy随机字符串:php str_shuffle 是否添加熵
【发布时间】:2014-02-14 09:35:38
【问题描述】:

我正在用这个生成随机字符串:

 $characters = '0123456789QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';  
$cl = strlen($characters) -1;
$id = '';
for ($p = 0; $p < $le; $p++) {N
    $id .= $characters[mt_rand(0, $cl)];
}

现在,如果我这样做str_shuffle($id)会增加熵,即使字符串更加随机吗?

【问题讨论】:

    标签: php random


    【解决方案1】:

    如果你想要密码熵,我可以建议 openssl_random_pseudo_bytes($length) 或 mcrypt_create_iv($length) 吗?

    对于自定义字符集,查找 binhex() 和 convBase(),它们应该在 PHP 手册 cmets 中用于 base_convert()

    【讨论】:

    • 是的,我很清楚 mt_rand 不是最好的随机数生成器,但我的问题是关于应用两个连续的伪随机操作。我目前的假设是,只要 shuffle 不使用 mt_rand,它就会添加(一些,可能非常有限的)熵。如果它使用相同的随机数生成器,即使有不同的种子,熵也不会真正增加。但我不是这方面的专家,因此提出了这个问题。
    • github.com/php/php-src/blob/… 使用 C 函数 php_rand(),据我所知,它不与 mt_rand() 共享种子,但与 rand() 共享种子。 github.com/php/php-src/blob/… 所以,虽然熵增益可能很小。
    • 呃,我知道。我为有一天不得不审核 PHP 的可怜草皮感到抱歉。
    【解决方案2】:

    没有。没有。

    str_shuffle 只是得到你的字符串的随机结果,所以它会给你另一个随机字符串,但不是更多的熵。

    如果您正在寻找更多熵的字符串,您可以将特殊字符添加到 $characters 变量或使 $le 比实际更大。

    【讨论】:

      猜你喜欢
      • 2012-12-14
      • 1970-01-01
      • 2011-09-16
      • 2015-11-06
      • 1970-01-01
      • 2018-12-09
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多