我想做一些类似于 YouTube 所做的事情。例如,这是一个有效的 YouTube 视频 ID didzxUkrtS0
现在我用整数存储用户的 ID,我想将这些数字转换为 8 个字符的字母数字标识。例如:(FZ3EY1IC
不是十六进制)
我已经知道我可以用 MD5 实现它,然后取前 8 个十六进制数字,但它并没有涵盖整个字母表。
我应该怎么做才能使用整数创建一个独特的模式,永远不要重复?
我想做一些类似于 YouTube 所做的事情。例如,这是一个有效的 YouTube 视频 ID didzxUkrtS0
现在我用整数存储用户的 ID,我想将这些数字转换为 8 个字符的字母数字标识。例如:(FZ3EY1IC
不是十六进制)
我已经知道我可以用 MD5 实现它,然后取前 8 个十六进制数字,但它并没有涵盖整个字母表。
我应该怎么做才能使用整数创建一个独特的模式,永远不要重复?
使您的整数 5 个 8 位字节长(如果您的整数是 32 位,则添加一个带有随机值的字节),即 40 位数据。
使用您可能希望保密的某个密钥对整数的 5 个字节进行加密。
将 40 个加密位切成 8 个 5 位部分。使用 32 个字母数字字符对每个部分进行编码。您可以选择为每个部分使用不同的 32 个(总共 36 个)字符。
反向操作是微不足道的。
我很确定 youtube 和 bitly 之类的网站会在数据库中存储一个大表,该表将每个链接的字母数字标识符转换为它们所针对的内部 ID(或者存储在行中)。当它需要一个新的标识符时,计算一个随机的并存储它。您需要这样做的原因是,攻击者无法预测下一条要添加的内容的 ID。