【问题标题】:How many characters does bin2hex(random_bytes()) depending on input?bin2hex(random_bytes()) 取决于输入有多少个字符?
【发布时间】:2017-08-25 04:59:04
【问题描述】:

我正在使用以下代码为我的应用生成一个简单的 UID:

private function _createUid() {
    $bytes = random_bytes(128);
    $uid = bin2hex($bytes);

    return $uid;
}

通过这样做,_createUid() 的结果将是一个 256 个字符的字符串。我的问题是,如果在同一台服务器上运行,这个字符串是否总是256 字符,我知道不同服务器上的一些差异。还有,一个字节等于两个字符吗?

任何帮助都会很棒,谢谢!

【问题讨论】:

  • 为什么不使用 uniqid()?
  • @nogad 这不是加密随机的,可能会重复。
  • 怎么可能不是 256 个字符?在十六进制中,一个字节始终表示为 2 个字符。
  • @zaph 好吧,所以当使用十六进制时,每个字节总是 2 个字符?
  • 是的,一个字节是 2**8 == 16**2 是两个十六进制字符。

标签: php encryption cryptography byte


【解决方案1】:

在十六进制中,一个字节始终表示为 2 个字符。

字节的十六进制表示是两个字符对的序列。第一个字符表示一个字节的最高有效 4 位,第二个字符表示一个字节的最低有效 4 位。

【讨论】:

  • 有点题外话,但是如果您使用random_bytes,验证密钥的合适字符长度是多少?我正在考虑做bin2hex(random_bytes(30)) 并想知道是否需要增加长度?
  • @Script47 1. 这取决于用例。 2. 最好在Information Security 上提问。
猜你喜欢
  • 2018-02-28
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多