Php 我已经创建了一个伪随机生成器,它对加密安全吗?
我创建了一个用于加密目的的随机生成器,我想知道它是否足够安全。如果是,你当然可以自由使用。提前感谢您阅读我的文字墙:D 功能说明Php 我已经创建了一个伪随机生成器,它对加密安全吗?,php,security,random,cryptography,Php,Security,Random,Cryptography,我创建了一个用于加密目的的随机生成器,我想知道它是否足够安全。如果是,你当然可以自由使用。提前感谢您阅读我的文字墙:D 功能说明 $this->pref_hash_algo($bits_of_entropy=null,$inclusive=false)函数获取默认的哈希方法(在我的例子中是sha256),或者如果给定了$bits_of_entropy,它将获得包含或不包含的最佳哈希算法。例如,包含230位的熵将返回sha256,而独占将返回sha224 从self::$HASH_PREFEREN
$this->pref_hash_algo($bits_of_entropy=null,$inclusive=false)
函数获取默认的哈希方法(在我的例子中是sha256
),或者如果给定了$bits_of_entropy
,它将获得包含或不包含的最佳哈希算法。例如,包含230位的熵将返回sha256
,而独占将返回sha224
从self::$HASH_PREFERENCES['128'][0]
返回的算法是ripemd128
对于$this->hash($input,$algorithm=null,$output\u type=self::output\u HEX)
它只执行PHPhash($input,$algorithm[,$binary])
并额外检查算法是否安全,以及是否支持更多的输出类型,而不是二进制和十六进制
生成代码
为了便于访问,将第一个版本移动到
更新
根据您的输入,我已将代码更改为以下内容:
编辑摘要:
- 不是散列,只是格式化/dev/uradom输出
- 添加了同时输出哈希,用于当哈希算法对于请求的随机位数量的输出太少时(例如,当请求4000位时为sha512)
php/my/path/to/file.php | ent
,在一个2.000.000字节的样本上测试/dev/uradom
方法和替代方法
给出了每字节7.999903位的熵。()/dev/uradom
- 另一种方法给出了每字节7.99913位的熵。()
/dev/uradom
被禁用/不可用时),并运行diehard-a-f/home/beanow/random.input-t10
:
给出了两个漏洞()/dev/uradom
- 给出的替代方法:0个漏洞()
给出了4个漏洞()/dev/uradom
- 给出的替代方法:1弱()
/dev/uradom
的输出进行哈希运算,如果这会降低系统的安全性的话。只需读出所需的字节,将其从base256更改为base16或其他任何需要的内容 您可以对输出运行许多测试,以确定输出的随机性
。。。[ent]对存储在文件中的字节序列应用各种测试,并报告这些测试的结果。[ent]对于评估用于加密和统计采样应用、压缩算法和其他文件信息密度相关应用的伪随机数生成器非常有用
。。。用于测量随机数发生器质量的一组统计测试
diehard(像之前的diehard一样)的主要目的是为了便于对(伪)随机数生成器进行计时和测试,包括软件和硬件,用于研究和密码学的各种目的
使用自制的伪随机数生成器,通过diehard和diehard测试套件是相当困难的。您使用的是预定义的哈希算法、uniqid和microtime函数,然后将它们组合在一起。您的“算法”与您使用的哈希算法一样好,没有更差,也没有更好。请参阅(但请跳过“已接受”答案,这有点错误)您创建的PRNG在哪里?我看到您正在使用一个:
/dev/uradom
或操作系统多次向您抛出的任何东西(隐含在uniqid
和mt_rand
中)。几乎不一样。(还有,“压缩”随机数据?巨大的红旗!)。你自己写了问题的答案,IMNSHO:“不要试图改进它,你很可能会毁掉它——反正我做了。”@N.B:从来没有更好过,但几乎总是更糟。@Beanow-如果你看不到你的“算法”取决于你使用的哈希算法的属性。。我们不能谈论你自己的散列。您只是使用了那些开销更大的算法。你所得到的只是在相同数量的排列下延长执行时间。必须有人这样做。此外,如果有内置的操作系统,我也会使用它。我编写了备份算法。他是大多数*nix系统附带的PRNG。然后对结果进行散列,这不会增加输出的熵。不要试图添加东西或可爱的东西,阅读系统PRNG并使用它。感谢你发布了最具建设性的答案,而不是假设我是一个随机脚本的孩子,使一些奇怪的东西。(后来我发现我的功能很像Drupal)。我会接受它,因为人们在有机会直接了解它的工作原理之前就关闭了它。我已经使用线程中的反馈来改进函数并添加测试结果。你能看到我是否正确解释了结果,并找到了一个几乎与/dev/uradom
一样好的算法吗?(除此之外,我的方法要慢得多,可能会有一个可预测的因素。)如果你只是需要一个PRNG来模拟,那么这些测试是很好的