我需要确定安全级别" d"通过使用SHA256计算哈希字符串中第一个d 0的数量(我定义了 c_hash(mystring,sha256)来做)。 我使用 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分钟才能找到与安全级别匹配的字符串。关于如何使用另一个循环更快地运行的任何建议?
答案 0 :(得分:0)
d*"0"
每次都在重新计算,尽管是不变的。也许计算它并在while循环帮助之前将其分配给另一个变量。
如果你的代码运行缓慢,那主要不是因为循环。生成名称和哈希应占用大部分运行时间。所以:
2a上。生成较短的名称,或
2B。如果has函数允许,请重新设计哈希生成器c_hash
以仅返回哈希值的前d
个数字。毕竟你只需要那些数字,计算整个哈希值需要时间。
答案 1 :(得分:0)
评估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)