2013-04-16 68 views
0

我想做类似于YouTube的操作。例如,这是一个有效的YouTube视频ID didzxUkrtS0独特ID的自定义哈希值

现在我正在用一个整数存储用户的ID,我想将这些数字转换为8个字符的字母数字标识。例如:FZ3EY1IC(不是十六进制)

我已经知道我可以用MD5实现它,然后取第8个十六进制数字,但它不包括整个字母表。

我该怎么做才能创建一个独特的模式使用整数,这不应该重复?

+0

也许这可能有助于http://stackoverflow.com/questions/1051949/map-incrementing-integer-range-to-six-digit-base-26-max-but-unpredictably/1052896#1052896 – galymzhan

+0

事情是如果我只使用一位数字(例如3),它会翻译为'c'而不是8个字母数字字符 – Pacha

+0

您是否仔细阅读了答案?在答案结尾查看表格,所有ID都映射到6个字符的唯一字符串 – galymzhan

回答

0

使您的整数5个8位字节长(通过添加一个随机值的字节,如果您的整数是32位),即40位数据。

使用某个密钥对您的整数的5个字节进行密码加密,您可能希望保密。

将40个加密位分成8个5位部分。使用32个字母数字字符对每个部分进行编码。您可以选择为每个部分使用不同的32个(总共36个)字符。

反向操作是微不足道的。

+0

这个想法是完美的。谢谢 – Pacha

+0

不完美,但它肯定会起作用,并且如果您已经拥有加密加密和解密例程,则很容易实现。 –

0

我很确定像YouTube和Bitly那样的网站是否在数据库中存储了一个大表,将每个链接的字母数字标识符转换为它们的内部ID(无论是或存储在行)。当它需要一个新的标识符时,计算一个随机的并存储它。您需要这样做的原因是,攻击者无法预测要添加的下一个内容的ID。