尝试暴力破解密钥时出现内存错误

时间:2015-05-28 17:14:34

标签: python-2.7

 def bruteForce( dictionary = {}):
    key = 0

    for i in range(len(dictionary)):
        keyRank = 0
        for k in range(68719476736):
            attempt = decrypt(dictionary[i], k)
            if(i != attempt):
                keyRank = 0
                break
            else:
                keyRank += 1
                key = k
                print 'key attempt: {0:b}'.format(key)
        if(keyRank == len(dictionary)):
            print 'found key: {0:b}'.format(key)
            break
  1. 密钥是36位
  2. 我在for k in range()代码行
  3. 上收到内存错误
  4. 为什么这是内存问题?在运行此行之前,python是否构建了一个实际的int列表?有没有更好的方法来编写这个循环?
  5. 我是Python的新手,这不会成为C或Java的问题。
  6. 这是一种已知的明文/密文攻击。字典是P:C对的映射。
  7. 它在虚拟机上,如果需要,我可以提高内存,但是想知道它失败的原因和基于代码的解决方法或更好的惯用方法。

1 个答案:

答案 0 :(得分:3)

在python 2中,range()将在内存中构建整个列表。

xrange()是一个懒惰评估的序列对象。

在python 3中,range()执行xrange()所做的事。