MD5哈希只能包含数字或仅包含字母吗?

时间:2011-07-26 05:38:50

标签: hash md5 crypt

我一直在研究,但我一无所知。 我知道MD5可以同时包含数字和字母但是如果我发现MD5只有数字或只有字母的情况下它会破坏我的脚本

6 个答案:

答案 0 :(得分:15)

列出几个只提供md5哈希值的第一个字符串:

ximaz : 61529519452809720693702583126814 
aalbke : 55203129974456751211900188750366 
afnnsd : 49716523209578759475317816476053 
aooalg : 68619150135523129199070648991237 
bzbkme : 69805916917525281143075153085385 

这是一个只有字母:

cbaabcdljdac : cadbfdfecdcdcdacdbbbfadbcccefabd

答案 1 :(得分:13)

你有32位数字。如果我们假设所有密码均匀分布,则有10 ^ 32个组合,仅由数字密码组成,6 ^ 32个字母密码组合,总共16 ^ 32个组合。

在每次调用时,这会导致脚本失败的概率为(10 ^ 32 + 6 ^ 32)/ 16 ^ 32。

 echo "scale=10;(10^32 + 6^32) / 16^32" |  bc 
.0000002938

因此,在大约340万个案例中,它将失败。你经常想用它吗?

答案 2 :(得分:5)

理论上,是的,MD5哈希(转换为十六进制字符串时)只能包含十进制数字或仅包含字母。

在实践中,同样是:字符串ximaz产生的MD5哈希为61529519452809720693702583126814Try it!

(感谢PHP Sadness示例)

答案 3 :(得分:1)

MD5旨在成为一个很好的哈希函数( 目前已损坏,不应该使用安全应用程序 ),这意味着它会生成随机查看输出,以便所有可能的值利用适合输出空间的。这些字母和数字是输出的十六进制表示。是的,有时您可以获得仅包含字母或仅包含数字的输出,但大多数情况下您将同时拥有两者。

如果我必须解析MD5的十六进制表示,我肯定需要时间来支持那些非常罕见的情况,当输出只是字母或仅数字时。

答案 4 :(得分:1)

我相信你正在处理MD5哈希的十六进制表示。 MD5哈希实际上是128位字符串。大多数工具使用十六进制表示法打印它们,这些表示形式为32个十六进制数字。十六进制数字使用0-9和a-f。

示例:

susam@swift:~$ echo -n "foo" | md5sum
acbd18db4cc2f85cedef654fccc4a4d8  -

答案 5 :(得分:1)

我知道这是一个非常古老的问题,但是我发现还有三个字符串只有md5哈希中的数字,Google在搜索这些哈希值时找不到任何内容,所以我认为值得张贴这些:

Intent intent = new Intent(getApplicationContext(), SomeActivity.class);