【问题标题】:Is it cryptographically secure to use bin2hex(random_bytes($str))?使用 bin2hex(random_bytes($str)) 在加密上是否安全?
【发布时间】:2018-02-05 18:19:17
【问题描述】:

我为这个问题找到了不同的答案,但没有一个人询问 cryptographic 安全性。

在 PHP 中使用 bin2hex(random_bytes($str)) 在密码学上是否安全?它会降低安全性或唯一性吗?

【问题讨论】:

  • 在 PHP7 中,这与您将获得的一样好
  • 我认为这真的取决于你用它做什么?
  • (有点跑题了)$str 是否包含整数?
  • 保护什么?
  • yes str contans integer @salathe

标签: php security encryption cryptography byte


【解决方案1】:

The documentation for random_bytes 表示函数

生成适合加密使用的任意长度的加密随机字节字符串,例如在生成盐、密钥或初始化向量时。

所以 PHP 开发人员认为它已经足够好了。输入应该是字节数,而不是字符串:

string random_bytes ( int $length )

bin2hex 对生成数据的加密适用性没有影响。特别是,它无法将您的随机字节“拉伸”成大量随机字节。如果您需要$n 字节的随机数据,请使用random_bytes($n)

【讨论】:

  • bin2hex 没有影响?大多数键和iv不需要特定大小的字节......因此32个随机字节比只有a-f0-9的32个字节好(bin2hex结果的一半)?只是好奇。
  • @IncredibleHat 所以 bin2hex 有影响吗?还是不行?
  • @IncredibleHat, bin2hex 确实会输出一个字符串,该字符串可以使用比random_bytes 生成的字符更少的字符。但是字符串会更长。两种表示形式都代表相同数量的随机生成的字节。
  • 对,我只是好奇,因为(例如)openssl_encrypt,需要一个长度为 32 的密​​钥,如果你将 bin2hex(random_bytes(32)) 切成两半,你实际上是把你的密钥削减到16 个随机字节。所以,它只是让我思考,并且......好吧......思考!
  • @IncredibleHat,您必须小心如何解释数据。在一天结束时,一些给定的字节数只是相应数量的零和一。 bin2hex 输出的值应该被解释为十六进制数字,而不是字符串。只要您将其考虑到如何使用变量中,您就可以开始使用了。 (关键是bin2hex不能加熵。)
猜你喜欢
  • 2018-02-28
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多