首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用循环在哈希对象中查找第一个d零的数目

使用循环在哈希对象中查找第一个d零的数目
EN

Stack Overflow用户
提问于 2018-05-17 02:46:11
回答 2查看 63关注 0票数 3

我需要通过使用SHA256 (我定义了c_hash(mystring,sha256)来计算哈希字符串中的前一个d0的数量来确定安全级别"d“)。我使用了generate_name函数,它生成一个随机的名字,名字有3-6个字母,姓氏有4-8个字母。这是我的代码:

代码语言:javascript
复制
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分钟才能找到与安全级别匹配的字符串。对于如何使用另一个循环使此运行更快,有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2018-05-17 07:34:50

  1. 尽管d*"0"是常数,但每次都在重新计算。也许计算它并将它赋值给另一个变量,然后才能使用while循环。
  2. 如果您的代码运行缓慢,这并不主要是因为循环。生成名称和散列应该占用大部分运行时间。因此,要么是: 2a。生成较短的名称,或 2b。如果has函数允许,则重新设计哈希生成器c_hash,使其只返回哈希值的第一个d数字。毕竟,您只需要这些数字,计算整个哈希值需要时间。
票数 0
EN

Stack Overflow用户

发布于 2018-05-17 09:49:16

只计算d*"0“一次,方法是将它放在函数的顶部。另外,使用startswith而不是使用片段。有效地给你:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50382629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档