我正在尝试使用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&# 39)+ MD4(' T&#39)。我可能认为以下功能可以正常工作
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)它不会导致我想要的结果。 我找不到清除实例以实现独立结果的方法。另一方面,我不能为每个循环实例化新对象以实现我想要的目标。 考虑到上述情况,我怎样才能达到预期目标。 谢谢大家。
答案 0 :(得分:1)
您无法清除现有实例,但也不需要。
只是实例化一个新的:
def keygen(key):
keystream=bytearray(b'')
for i in key:
a = md5(i.encode())
keystream += a.digest()
return keystream
现在,请记住,您尝试做的是非常不安全,因为从计算出的密钥流中导出原始密钥是微不足道的,这是一个非常不受欢迎的属性。 PRNG(虽然这甚至不是PRNG,因为密钥流是有限的)。
通常的警告适用:除非你只是在玩耍或学习,否则不要自己加密。