我一直在研究,但我一无所知。 我知道MD5可以同时包含数字和字母但是如果我发现MD5只有数字或只有字母的情况下它会破坏我的脚本
答案 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哈希为61529519452809720693702583126814
。 Try 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);