返回信息流代码:
import hashlib
def f(input_string):
m=hashlib.md5()
m.update(input_string)
return m.hexdigest()
问题: 输入都是长度为17的字符串,不同的字符串会得到相同的返回值吗?
如果长度是64呢,答案是否不一样?
呼叫暖神
这是一条镜像帖。来源:北邮人论坛 / python / #7919同步于 2015/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
请教hashlib
jackling
2015/7/28镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
Brute force 吗?太多评论了吧
【 在 Ncer 的大作中提到: 】
: 自己试一试不就知道了。。。
:
: 通过『我邮2.0』发布
:
发自「贵邮」
就是不太懂这个原理,返回结果是32位的string, 如果是把17位的转化成32位的,我觉得有办法可以不重复啊,例如后面补15个0。但是不知道Python 这里怎么做的。
【 在 chinapds 的大作中提到: 】
: 这个是要看md5的原理吧。hash碰撞在输入空间够大的时候是肯定发生的吧
:
发自「贵邮」
大概给个数量级呗
【 在 NotGoodGuy 的大作中提到: 】
: 记得是有很多很多(一个相当庞大的数字)个字符串才会出现一次相同的hash值。。
:
发自「贵邮」
MD5的原理可以查wiki。具体到python的hashlib如何实现,建议看看源码吧。
MD5是一种 “消息摘要”算法,输入可以是任意长度的字符串。实现的话肯定不会用 “如果输入是17位,返回的摘要就是在输入后添加 (64-17)=47个0”这种方法。
另外,相同的输入会给出相同的摘要。MD5最常见的用途是检测文件是否被更改过,一般来说,文件更改前后的MD5是不一样的。
至于LS说的碰撞问题,只有在量级很大的情况下才会出现。假设32位的MD5,且MD5由字母和数字组成,那么可用的MD5共有 (52+10)^32种。不知道在你的场景中是否够用
http://baike.baidu.com/view/7636.htm#3
md5的算法是固定的。貌似找hash碰撞似乎还挺难的……
【 在 jackling 的大作中提到: 】
: 就是不太懂这个原理,返回结果是32位的string, 如果是把17位的转化成32位的,我觉得有办法可以不重复啊,例如后面补15个0。但是不知道Python 这里怎么做的。
:
: 发自「贵邮」