node.js - 将缓冲区转换为十六进制字符串时可能会生成哪些符号?
问题描述
如果使用以下函数生成相同的秘密,我想知道获得相同秘密的概率
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
%
解决方案
Hex 只会给你 16 个可能的字符,0-9 和 AF。所以这就是16^4
可能性,65,536
。
您可以通过使用它来获得更多,toString(36)
这将为您提供每个角色的 36 种可能性。base 64 转换器将为您提供 64 个字符。
如果你想要一些随机的东西,你需要有超过 4 个字符(slice(0, 4)
.
推荐阅读
- android - SYSTEM_UI_FLAG_LOW_PROFILE 在 Android 8 上不起作用
- spring-boot - Spring基本安全配置的用户名/密码不起作用
- sql - SQL Count 与按问题分组不同
- asp.net-core - ASP .Net Core 中的图像压缩而不降低图像质量
- git - ChefSpec 找不到安装的 git
- python - 我什么时候应该在 pandas 数据帧上使用 query vs eval?
- c - 将 printf 命令写入或保存到文本文件(c 编程)
- node.js - 同一行 Node.js 代码可以同时运行吗?
- java - java - 如何在java中使用useDelmeter从字符串中获取两个特定值?
- spring-boot-actuator - 如何自定义 Spring Boot admin 2.o UI?