将url转换为唯一的32个字符标记

mor*_*ous 2 php compression encryption encoding

我正在写一个联盟系统,我想从网址生成一个独特的32个字符宽的令牌.

问题是URL最长可达128个字符(IIRC).有没有办法可以从给定的URL创建一个唯一的32字符宽的广告/令牌,没有任何"碰撞"?

我不确定这是编码,加密还是散列问题(可能是这三者的混合).

我将使用PHP实现这个"映射函数",因为这是我用来构建这个特定系统的语言.关于如何做到这一点的任何建议?

甚至可以将128个字符串字符串唯一映射到32个字符串中(即没有冲突?)...

[编辑]

我只是做了一些阅读,发现网址的最大长度实际上是2K左右.但是,我并不担心那种"愚蠢"的边缘情况.我很确定99.9%的时间,我强加的128个字符的限制应该足够了.

Nul*_*ion 6

甚至可以将128个字符串字符串唯一映射到32个字符串中(即没有冲突?)...

在某种程度上 您可以使用md5sha1之类的哈希函数.这就是他们要做的事情.
MD5生成一个32字符串,SHA1生成一个40字符串.

当然,你无法保证不会发生碰撞.这是不可能的,因为消息空间对于哈希来说太大了(如果使用MD5,则有2 1024条消息与2 128条可能的哈希),但这些功能意味着抗冲突且难以反转.

维基百科参考:

http://en.wikipedia.org/wiki/Hash_function
http://en.wikipedia.org/wiki/MD5
http://en.wikipedia.org/wiki/SHA-1