从40个字符的字符串创建5个字符唯一标识符

时间:2015-02-13 17:10:36

标签: c# oauth-2.0 compression md5

我有一个10到300个字符串代码(大写字母为40个字符)的列表,需要存储在oauth2 Access Token中(基于声明的授权); 我必须尽可能地保持令牌小(标题大小问题),所以我正在寻找一种方法来创建一个代表令牌内原始字符串的小唯一标识符。

然后我会创建一个查找表,我将把uid和原始字符串放在一起 当令牌将由客户端发送时,通过uid和查找表,我将返回原始字符串。

我读过可以截断哈希的第一个字节(MD5,SHA1),我想知道我是否可以安全地遵循这条路径。

是否可以安全地(碰撞)创建这些字符串的哈希值(唯一),其中每个哈希值最多为4/5字节?

修改
我无法预先生成随机字符串作为索引(或者只是列表索引),因为此列表可能会更改并增加大小(例如,当部署服务器应用程序并将新代码添加到此列表中时)我必须确保当我从客户端获取令牌时,uid将被绑定到正确的代码。

1 个答案:

答案 0 :(得分:2)

是的,任何这些哈希算法都会给出一个统一的哈希码,其中每个比特都不应该携带比其他任何信息更多的信息。你可以只取4-5个字节(只要从每个代码中取相同的字节)并用作较小的哈希码。

当哈希码越短时,碰撞风险就会越高,但是对于该哈希码长度,您仍然会获得尽可能低的冲突风险。

编辑:

随着问题的改变;不,您无法使用哈希码创建唯一标识符。使用足够长的哈希代码,您可以使冲突非常罕见,使得哈希代码可以用作几乎任何实际应用程序的唯一标识符,但是32位哈希代码不会这样做,128位哈希代码会做这一点。