我正在研究无线安全性并试图编写一个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
答案 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
完成您的工作需要相当多的磁盘存储(和金钱)。
Projected US Federal debt at the end of fiscal year 2014 is $18.23 trillion,我估计的成本,不考虑机架,电源和能源费用,是886万亿美元。
Combinatorial_Explosion@SussexUniversity,
如果您仍然坚信按照您所描述的方向开展无线安全研究项目,那么您可以在驱动器购买上获得大量折扣。
答案 3 :(得分:0)
我不想评论你想做什么。
您的代码可以修剪(相当多)到以下
with open("myfile", "w") as f:
for x in xrange(0xff,0xff*2+1): f.write("%X\n"%x)
请注意
您可以在源代码中编写十六进制数字,例如,ehm,十六进制数字,您也可以混合使用十六进制和十进制表示法
to_hex
功能是多余的,因为python
有(惊喜!)许多不同的方式来格式化您的输出(这里我使用了所谓的{{3} })。
当然你必须在open
语句中更改文件名
调整xrange
生成的区间的极值(似乎
您正在使用python 2.x
)内容。
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()