在C中,我被要求编写一个函数来生成一个长度为40个字符(30个字节?)的随机Base64字符串。 但我不知道Base64的味道,所以它需要与许多版本的Base64兼容。
我该怎么办?什么是最好的选择?
答案 0 :(得分:4)
所有Base64编码都同意某些内容,例如使用[0-9A-Za-z],这是62个字符。所以你不会得到完整的64 ^ 40种可能的组合,但你可以获得62 ^ 40,这仍然是相当多的!您可以为每个数字生成一个随机数,模62.或者更仔细地将其切片以减少系统所需的熵量。例如,给定一个32位随机数,一次取6位(0..63),如果这些位是62或63,则丢弃它们,否则将它们映射到一个Base64数字。这样,您只需要大约8位,32位整数就可以生成40个字符的字符串。
如果这个系统有安全考虑,你需要考虑产生“异常”Base64号码的后果(例如,攻击者可以检测到你的Base64号码只有62个只有一个小语料库的符号 - 这是否重要?)。