我已经创建了一个MD5散列字符串的函数,现在我想多次迭代这个过程,每次在“重新”散列之前从十六进制散列输出中删除大量字符。在花了好几个小时寻找一种方法来实现这一点之后,我研究了range()函数,map()函数,试图用for循环和嵌套函数来实现这一点,但我缺乏提出正确问题的知识。答案可能在于类功能,但我找不到一种方法将其应用于我的特定问题
下面是我的代码:
import hashlib
string = "randomstring"
def hash(string):
en = string.encode()
hex_result = hashlib.md5(en)
return hex_result.hexdigest()
hash1 = hash(string)[:-10]
print("Hash #1", hash1)
def hash1a(hash1):
en = hash1.encode()
hex_result = hashlib.md5(en)
return hex_result.hexdigest()
hash2 = hash1a(hash1)[:-10]
print("Hash #2", hash2)
def hash2a(hash2):
en = hash2.encode()
hex_result = hashlib.md5(en)
return hex_result.hexdigest()
hash3 = hash2a(hash2)[:-10]
print("Hash #3", hash3)
def hash3a(hash3):
en = hash3.encode()
hex_result = hashlib.md5(en)
return hex_result.hexdigest()
hash4 = hash3a(hash3)[:-10]
print("Hash #4", hash4)
def hash4a(hash4):
en = hash4.encode()
hex_result = hashlib.md5(en)
return hex_result.hexdigest()
hash5 = hash4a(hash4)[:-10]
print("Hash #5", hash5)
def hash5a(hash5):
en = hash5.encode()
hex_result = hashlib.md5(en)
return hex_result.hexdigest()
hash6 = hash5a(hash5)[:-10]
print("Hash #6", hash6)
我希望能够捕获第一个hash
函数的输出,通过追加[:-10]
对其进行修改,并将该值提交回hash
函数。能够在列表或字典中捕获这一点(通过使用for循环?)将是理想的。我花了大约5个小时研究这个问题,我学到了很多。希望我能做得更好,但我真的需要一些指导。谢谢
@Barmar回答得很好,但我想我可能会补充一点解释,希望能澄清一些事情
首先:函数是一种很好的方法,但是函数专门用于创建可调用的可执行代码块。在您的代码中,相同的代码块被冗余地用于创建“不同”的函数,这些函数只在变量名上不同,而不是在可执行代码上不同。因此,虽然您有正确的想法,但应该只有一个函数来实现这一点
这将是一个示例,从您的代码中可以看出,您的一个函数被多次调用:
为了使用for循环调用此函数,您有两个选项:将for循环插入函数中,以便函数调用自身,如@Barmar所说,或者反之亦然,例如,在for循环内调用函数
如果您决定保持函数的原样,而不是按照@Barmar的建议对其进行修改(我个人会同意他的修改,但那就是我),那么您可以在循环中调用上面的hash()函数:
这里有一个指向Python文档关于for循环的链接:https://docs.python.org/3/reference/compound_stmts.html#for
祝你好运,希望这有帮助:)
使用循环,并将散列的结果分配给用作
hash()
函数参数的变量相关问题 更多 >
编程相关推荐