首页 > 解决方案 > 将缓冲区转换为十六进制字符串时可能会生成哪些符号?

问题描述

如果使用以下函数生成相同的秘密,我想知道获得相同秘密的概率

const crypto = require('crypto');

const generateSecret = () => {
  const buffer = await crypto.randomBytes(8);
  return buffer.toString('hex').slice(0, 4);
}

但我不确定可以使用buffer.toString('hex'). 都是字母数字符号吗?在这种情况下,它是 62 个符号(小写 + 大写 + 数字)。如果有 62 个符号,则有 (62 + 4 - 1)!/ (4! * (62 - 1)!) 可能的组合(重复)或 677040。因此,在这种情况下,概率1/677040 * 100约为0.00014%

标签: node.jsprobability

解决方案


Hex 只会给你 16 个可能的字符,0-9 和 AF。所以这就是16^4可能性,65,536

您可以通过使用它来获得更多,toString(36)这将为您提供每个角色的 36 种可能性。base 64 转换器将为您提供 64 个字符。

如果你想要一些随机的东西,你需要有超过 4 个字符(slice(0, 4).


推荐阅读