我需要通过使用 SHA256 计算哈希字符串中前 d 个 0 的数量来确定安全级别“d”(我定义了 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 分钟以上才能找到与安全级别匹配的字符串。关于如何使用另一个循环使它运行得更快的任何建议?
最佳答案
d*"0"
尽管保持不变,但每次都会重新计算。也许在 while 循环会有所帮助之前计算它并将其分配给另一个变量。如果您的代码运行缓慢,这主要不是因为循环。生成名称和散列应该占用大部分运行时间。所以要么:
2a。生成较短的名称,或者
2b。如果 has 函数允许,请重新设计您的哈希生成器
c_hash
以仅返回哈希值的前d
位。毕竟您只需要这些数字,计算整个哈希值需要时间。
关于python - 使用循环查找散列对象中前 d 个零的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50382629/