python代码生成密码列表

时间:2014-12-28 17:45:28

标签: python

我正在研究无线安全性并试图编写一个python脚本来生成密码,而不是随机的,而是一个十六进制数字的字典。这些字母必须是大写字母,并且必须从12个字符到20个字符。我从11 f变为20 f,这似乎符合要求。然后我尝试将它们放在一个文本文件中。在我创建文件后,我将其修改为777,然后单击运行。已经过了几分钟,但我不知道它是否有效。我现在正在kali运行它,在64位核心i3上使用8gb内存。我不确定它会花多长时间,但这是我的代码,请告诉我它是否合适:

# generate 10 to 32 character password list using hex numbers, 0-9 A-F
def gen_pwd(x):
    x = range(17592186044415 -295147905179352830000)
    def toHex(dec):
        x = (dec % 16)
        digits = "0123456789ABCDEF"
        rest = dec / 16
        if (rest == 0):
            return digits[x]
        return toHex(rest) + digits[x]

    for x in range(x):
        print toHex(x) 
    f = open(/root/Home/sdnlnk_pwd.txt)
    print f
    value = x
    string = str(value)
    f.write(string) 

gen_pwd

6 个答案:

答案 0 :(得分:2)

如何回合

password = hex(random.randint(1000000,100000000))[2:]

pw_len = 12
my_alphabet = "1234567890ABCDEF"
password = "".join(random.choice(my_alphabet) for _ in range(pw_len))

或者更接近你想要做的事情

struct.pack("Q",12365468987654).encode("hex").upper()

基本上你是一个非常简单的任务过于复杂

完全按照你的要求做你可以简化它

import itertools, struct

def int_to_chars(d):
    '''
    step 1: break into bytes
    '''
    while d > 0: # while we have not consumed
       yield struct.pack("B",d&0xFF) # decode char
       d>>=8 # shift right one byte
    yield "" # a terminator just in case its empty

def to_password(d):
    # this will convert an arbitrarily large number to a password
    return "".join(int_to_chars(d)).encode("hex").upper()  
    # you could probably just get away with `return hex(d)[2:]`

def all_the_passwords(minimum,maximum):
    #: since our numbers are so big we need to resort to some trickery
    all_pw = itertools.takewhile(lambda x:x<maximum,
                                 itertools.count(minimum))
    for pw in all_pw:
        yield to_password(pw)

all_passwords = all_the_passwords( 0xfffffffffff ,0xffffffffffffffffffff)
#this next bit is gonna take a while ... go get some coffee or something
for pw in all_passwords:
    print pw
#you will be waiting for it to finish for a very long time ... but it will get there

答案 1 :(得分:1)

您可以使用time.time()来获取执行时间。如果您使用的是python 2,请使用xrange()代替range,因为xrange会返回迭代器:

import time

def gen_pwd(x):

    def toHex(dec):
        x = (dec % 16)
        digits = "0123456789ABCDEF"
        rest = dec / 16
        if (rest == 0):
            return digits[x]
        return toHex(rest) + digits[x]

    for x in range(x):
        print toHex(x) 
    f = open("/root/Home/sdnlnk_pwd.txt")
    print f
    value = x
    string = str(value)
    f.write(string) 

start= time.time()
gen_pwd()
last=time.time()-start
print last

注意:您需要()来调用您的""函数中的open()和{{1}}。另外我认为你的第一个范围是一个额外的命令,因为它错了,你需要删除它。

答案 2 :(得分:1)

声明

我想对OP问题发表评论,但我需要显示一些代码以及代码产生的输出,以便我最终决定以答案的格式提出我的评论。

OTOH,我希望这个评论能说服OP他/她的事业虽然在概念上很简单(参见我以前的答案,6行Python代码),但是对于可用资源是不可行的(我的意思是,可以在Planet Earth上获得)


代码

import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
pg = lambda n: locale.format("%d", n, grouping=True)


def count_bytes(low, hi):
    count = low+1
    for i in range(low+1,hi+1):
        nn = 15*16**(i-1)
        nc = i+1
        count = count + nn*nc
    return count

n_b = count_bytes(10,20)
n_d = n_b/4/10**12
dollars = 139.99*n_d

print "Total number of bytes to write on disk:",   pg(n_b)
print """
Considering the use of
    WD Green WD40EZRX 4TB IntelliPower 64MB Cache SATA 6.0Gb/s 3.5\" Internal Hard Drives,
    that you can shop at $139.99 each
   (see <http://www.newegg.com/Product/Product.aspx?Item=N82E16822236604>,
    retrieved on December 29th, 2014)."""
print "\nNumber of 4TB hard disk drives necessary:", pg(n_d)
print "\nCost of said hard disks: $" + pg(dollars)

输出

Total number of bytes to write on disk: 25,306,847,157,254,216,063,385,611

Considering the use of
    WD Green WD40EZRX 4TB IntelliPower 64MB Cache SATA 6.0Gb/s 3.5" Internal Hard Drives,
    that you can shop at $139.99 each
   (see <http://www.newegg.com/Product/Product.aspx?Item=N82E16822236604>,
    retrieved on December 29th, 2014).

Number of 4TB hard disk drives necessary: 6,326,711,789,313

Cost of said hard disks: $885,676,383,385,926

我对OP想要做什么的评论

完成您的工作需要相当多的磁盘存储(和金钱)。

视角

Projected US Federal debt at the end of fiscal year 2014 is $18.23 trillion,我估计的成本,不考虑机架,电源和能源费用,是886万亿美元。

推荐阅读

Combinatorial_Explosion@SussexUniversity

有希望

如果您仍然坚信按照您所描述的方向开展无线安全研究项目,那么您可以在驱动器购买上获得大量折扣。

答案 3 :(得分:0)

序言

我不想评论你想做什么。

代码MkI

您的代码可以修剪(相当多)到以下

with open("myfile", "w") as f:
    for x in xrange(0xff,0xff*2+1): f.write("%X\n"%x)

对我的代码的评论

请注意

  1. 您可以在源代码中编写十六进制数字,例如,ehm,十六进制数字,您也可以混合使用十六进制和十进制表示法

  2. to_hex功能是多余的,因为python有(惊喜!)许多不同的方式来格式化您的输出(这里我使用了所谓的{{3} })。

  3. 当然你必须在open语句中更改文件名 调整xrange生成的区间的极值(似乎 您正在使用python 2.x)内容。

    代码MkII

    Joran Beasley评论说(至少在Python 2.7中)xrange在内部使用C long,因此无法完成代表任务 0XFFFFFFFFFFFFFFFFFFFF。这个替代代码可能是一种可能性:

    f = open("myfile", "w")
    cursor = 0XFFFFFFFFFF
    end = 0XFFFFFFFFFFFFFFFFFFFF
    while cursor <= end:
        f.write("%X\n"%cursor)
        cursor += 1
    

答案 4 :(得分:0)

characters=["a","b","c"]
for x,y in zip(range(5),characters):
    print (hex(x)+y)

输出:

>>> 
0x0a
0x1b
0x2c
>>> 

你知道,它实际上是以一种简短的方式做到的。如果你使用这样的范围是不可能的,保持小,并尝试在结果中添加其他东西。

  

同样对于文件处理,这是一种更好的方法:

with open("filepath/name","a+") as f:
    f.write("whateveryouwanttowrite")

我正在使用密码生成器,如果你定义一个带有复杂字符的字典并且编译它们会更好:

passw={"h":"_*2ac","e":"=.kq","y":"%.hq1"}
x=input("Wanna make some passwords? Enter a sentence or word: ")
for i in x:
    print (passw[i],end="")
    with open("passwords.txt","a+") as f:
        f.write(passw[i])

输出:

>>> 
Wanna make some passwords? Enter a sentence or word: hey
_*2ac=.kq%.hq1
>>> 

所以,只需用keys = alphabet和values =复杂字符来定义一个dict,你就可以用简单的单词 - 句子来制作非常强大的密码。我只是写了一个例子,当然你可以稍后将它们添加到dict中,你不必写。但基本的方法是我认为更好。

答案 5 :(得分:-2)

所有这一切都很好,但是,没有一个能完成我的目的。如果python无法处理如此大的数字,我将不得不使用其他东西。正如我所说,我不想随机生成任何东西,我需要一个连续的十六进制字符列表,长度从12个字符到20个字符。它是一个密码字典,它只不过是十六进制数,大约应该是16个字符。

有没有人对我可以用于此目的有什么建议?我认为某种类型的c语言应该可以解决这个问题,但我对c或c ++的了解要少于python。这听起来需要一段时间,但没关系,这只是一个研究项目。

我想出了另一种可能性,从11点开始以十六进制计算直到我达到20点。这将产生大约43亿个麻木,这应该适合7900万页的文字。听起来有点大,但如果我从14岁到18岁,那应该是可以管理的。这是我现在提出的代码:

x = 0xffffffffffffff
def gen_pwd(x):
    while x <= 0xffffffffffffffffff:
        return x
        string = str(x)
    f = open("root/Home/sdnlnk_pwd.txt")    
    print f.upper(string, 'a')
    f.write(string)
    x = x + 0x1
gen_pwd()