在 C 语言中,我被要求编写一个函数来生成长度为 40 个字符(30 个字节?)的随机 Base64 字符串。但是我不知道Base64的味道,所以它需要兼容很多版本的Base64。
我能做些什么 ?什么是最好的选择?
所有 Base64 编码在某些方面都一致,例如使用 [0-9A-Za-z],即 62 个字符。所以你不会得到完整的 64^40 个可能的组合,但你可以得到 62^40,这仍然是很多!您可以为每个数字生成一个随机数,mod 62。或者更仔细地对其进行切片以减少系统所需的熵量。例如,给定一个 32 位随机数,一次取 6 位 (0..63),如果这些位是 62 或 63,则丢弃它们,否则将它们映射到一个 Base64 位。这样,您只需要大约 8 个 32 位整数即可生成 40 个字符的字符串。
如果这个系统有安全方面的考虑,你需要考虑生成“不寻常”的 Base64 数字的后果(例如,攻击者可以检测到你的 Base64 数字的特殊之处在于只有 62 个符号和一个小的语料库——这有关系吗?)。