我试图使用md5作为密钥流生成器,并且需要输入和相应的哈希值相互独立。我的问题是:
from hashlib import md5
a1=md5()
a2=md5()
a1.update(b'a')
a1.update(b'b')
a2.update(b'ab')
a1.digest()==a2.digest()
True从上面看,我实际上希望a1.update(b 'b‘)是’b‘而不是'ab’的散列值。换句话说,我想要的是连接散列值以形成密钥流。例如,我有一个种子:"TEST“,我想把每个字母都输入md5,简单地说,结果是md5('T')+md5('E')+md5('S')+md4('T')。我可能认为以下功能会起作用
def keygen(key):
a = md5()
keystream=bytearray(b'')
for i in key:
a.update(i.encode())
keystream += a.digest()
return keystream但是,由于a.update(a);a.update(b)等同于a.update(a+b),所以它不会导致我想要的结果。我找不到方法来清除实例,以获得独立的结果。另一方面,我不能在每个循环中实例化新对象以实现我想要的目标。考虑到上述情况,我怎样才能达到我想要的目标。谢谢大家。
发布于 2014-12-18 15:43:44
您不能清除现有实例,但也不需要清除。
只需实例化一个新的:
def keygen(key):
keystream=bytearray(b'')
for i in key:
a = md5(i.encode())
keystream += a.digest()
return keystream现在,请记住,您要做的是非常不安全的,因为从计算的密钥流派生原始密钥非常简单,这对于PRNG来说是一个非常不可取的属性(尽管这甚至不是PRNG,因为密钥流是有限的)。
通常的警告适用:除非你只是在玩或学习,否则不要使用你自己的密码。
https://stackoverflow.com/questions/27550321
复制相似问题