如何使用哈希确保客户端创建的ID不具有人类意义?

时间:2016-08-08 04:35:39

标签: validation hash cryptography uuid

我想允许未经验证的客户创建相当短的ID,但强制它们不具有人类意义(例如“l34fa75ljasd”没关系,但“canada-is-evil”不是)。

执行此操作的一种方法是让客户端创建一个值,对其进行哈希处理,然后使用哈希值作为ID(首先建议in this question)。

我不确定实现此目的的最佳方法是什么。

我能想到的最简单的方法是让客户端创建一个随机字符串,用blake2b哈希,base64编码结果,然后将其截断为所需的位数。

这种方法似乎有问题 - 可能很容易导致哈希的第一部分(尽管不是整个事件)与所需的字符串冲突。使用散列的整个输出作为ID将消除此问题,但它会与我们最初的结果目标相冲突。另外,我不确定作为哈希函数输入提供的值应该是多久。

具有更多加密专业知识的人是否可以权衡实施此类系统的正确方法?我的目标是得到的ID为128 base64编码位,所以22个字符。我也希望哈希的结果在该空间上均匀分布,这样ID就可以用作全局标识符而不会增加冲突的可能性(如果可能的话)。

0 个答案:

没有答案