我需要通过使用SHA256 (我定义了c_hash(mystring,sha256)来计算哈希字符串中的前一个d0的数量来确定安全级别"d“)。我使用了generate_name函数,它生成一个随机的名字,名字有3-6个字母,姓氏有4-8个字母。这是我的代码:
def d_security(d):
t0 = time.clock()
cnt = 0
while cnt != d:
obj = generate_name()
hash_obj = c_hash(obj,sha256)
if hash_obj[:d] == d*"0":
cnt+=1
t1 = time.clock()
print(t1-t0)
return None对于d= 5,需要超过2分钟才能找到与安全级别匹配的字符串。对于如何使用另一个循环使此运行更快,有什么建议吗?
发布于 2018-05-17 07:34:50
d*"0"是常数,但每次都在重新计算。也许计算它并将它赋值给另一个变量,然后才能使用while循环。c_hash,使其只返回哈希值的第一个d数字。毕竟,您只需要这些数字,计算整个哈希值需要时间。发布于 2018-05-17 09:49:16
只计算d*"0“一次,方法是将它放在函数的顶部。另外,使用startswith而不是使用片段。有效地给你:
def d_security(d):
expected = d*"0"
t0 = time.clock()
cnt = 0
while cnt != d:
obj = generate_name()
hash_obj = c_hash(obj,sha256)
if hash_obj.startswith(expected):
cnt+=1
t1 = time.clock()
print(t1-t0)https://stackoverflow.com/questions/50382629
复制相似问题