md5 hash或crc32在这种情况下使用哪一个

时间:2011-08-14 21:50:55

标签: hash md5 uniqueidentifier crc32

我需要一个可以用少于26个字符表示的哈希值 Md5产生32个字符长字符串,如果将其转换为base 36它有多好,

我需要散列而不是加密,而是基本上根据输入和输入数据的时间识别每个输入的唯一性。目前我可以将其视为

        $hash=md5( str_ireplace(".","",microtime()).md5($input_data) )  ;
        $unique_id= base_convert($hash,16,36) ;

应该像这样或者使用crc32,它会产生更小的散列大小,但我担心它不会那么独特吗?

1 个答案:

答案 0 :(得分:1)

我认为可以采用更简单的解决方案。

根据您的陈述,您有26个字符的空格。然而,为了澄清我所理解的性格和你理解的性格,让我们做一些挖掘。

MD5哈希acc。维基百科产生16个字节的哈希值。

CRC32算法产生4个字节的哈希值。

我理解“字符”(在最简单的意义上)是ASCII字符。每个ascii字符(例如A = 65)是8位长。

MD5 aglorithm产生16字节*每字节8位= 128位,CRC32为32位。

你必须明白哈希在数学上不是唯一的,但“可能是唯一的。”

因此,根据您的描述,我的解决方案是将哈希的位表示为ascii字符。

如果您只能在MD5和CRC32之间进行选择,答案将是MD5。但是你也可以使用SHA-1 160位散列< 26个字符串(长度为20个ascii字符)。

如果您担心每个哈希使用的符号集,则两个哈希都在集[A-Za-z0-9]中(我相信)。

最后,当您将基本数字从一个基数转换为另一个基数时,数字不会改变,因此算法的强度不会改变;它只是改变了数字的表示方式。