本文目錄一覽:
如何用Python寫一個暴力破解加密壓縮包的程
有些時候加密rar軟體經常會忘了密碼,但記得密碼的大概,於是乎用Python寫個程序來暴力破解吧:
首先要搞清楚如何用命令行來解壓縮,經研究,rar軟體解壓是用的unrar.exe,將這個程序拷貝到C:\windows,然後進入加密軟體包所在的文件夾,用命令行運行 下面的命令:
unrar.exe e -pabcd 123.rar
程序就是先前拷到C:\windows,然後參數e是指相對路徑,如果在是本文件夾下運行這個命令,則只打文件名就可以了,輸入密碼的方式是-p後面的欄位,假定是abcd,最後面的是要解壓的文件名。
下面我們解決如何用Python來運行windows下的命令行
import subprocess
command = ‘unrar.exe e -n -pabcd 123.rar’
subprocess.call(command)
這樣也可以完成解壓,既然這樣,那就開干吧,寫一個暴力循環,我以4位字母為例,字母加的不全,實際使用可以視情況添加
list1=[‘a’,’b’,’c’,’d’]
list2=[‘a’,’b’,’c’,’d’]
list3=[‘a’,’b’,’c’,’d’]
list4=[‘a’,’b’,’c’,’d’]
for i1 in range(0,len(list1),1):
for i2 in range(0,len(list2),1):
for i3 in range(0, len(list3), 1):
for i4 in range(0, len(list4), 1):
password=list1[i1]+list2[i2]+list3[i3]+list4[i4]
print(password)
command = ‘unrar.exe e -n -p’ + password + ‘ 123.rar’
child = subprocess.call(command)
if child == 0:
print(‘解壓密碼是:’,password)
break
child是返回值,為0表示解壓成功,可以挑出循環並列印密碼了,我實測,4位純數字或者字母,只需要十多秒就出來了,非常簡單
Python動態背包問題,怎麼解決
def bag(n,c,w,v):
res=[[-1 for j in range(c+1)] for i in range(n+1)]
for j in range(c+1):
res[0][j]=0
for i in range(1,n+1):
for j in range(1,c+1):
res[i][j]=res[i-1][j]
if j=w[i-1] and res[i][j]res[i-1][j-w[i-1]]+v[i-1]:
res[i][j]=res[i-1][j-w[i-1]]+v[i-1]
print res
return res
def show(n,c,w,res):
print ‘最大價值為:’,res[n][c]
x=[False for i in range(n)]
j=c
for i in range(n,0,-1):
if res[i][j]res[i-1][j]:
x[i-1]=True
j-=w[i-1]
print(‘選擇的物品為:’)
for i in range(n):
if x[i]:
print ‘第’,i,’個,’
print(”)
if __name__==’__main__’:
n=5
c=10
w=[2,2,6,5,4]
v=[6,3,5,7,6]
res=bag(n,c,w,v)
show(n,c,w,res)
輸出:[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-1, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6], [-1, 0, 6, 6, 9, 9, 9, 9, 9, 9, 9], [-1, 0, 6, 6, 9, 9, 9, 9, 11, 11, 14], [-1, 0, 6, 6, 9, 9, 9, 13, 13, 16, 16], [-1, 0, 6, 6, 9, 9, 12, 13, 15, 16, 16]]
最大價值為: 16
選擇的物品為:
第 0 個,
第 1 個,
第 3 個,
想問下大神python的背包問題的源代碼(最好玩也有偽代碼,請用遞歸法實現),因為只學過遞歸法,所
遞歸有層數限制,所以最好不要用,能不用就不用,沒有想到什麼好的演算法,弄了個簡單粗暴的,包容量除以最小質量的,就是最多可以裝多少個,然後全排列一遍三種商品,並計算價值,取最大的一個價值,代碼如下:
a, b, c = 2, 2.5, 3 # 三種商品質量
A, B, C = 4, 5, 6 # 三種商品價值
m = 100 # 包容量
ds = int(100 / min(a, b, c)) # 最小質量 取到最大數量
mx = 0 # 最大價值
nl = [] # 商品數量列表
for i1 in range(0, ds + 1): # 全排列
for i2 in range(0, ds + 1 – i1):
for i3 in range(0, ds + 1 – i1 – i2):
# 判斷總質量 超出則捨棄
n = i1 * a + i2 * b + i3 * c
if n m:
continue
# 計算總價值 取最高值及排列並存儲
j = i1 * A + i2 * B + i3 * C
if mx j:
mx = j
nl = [i1, i2, i3]
# 輸出最大價值和組合
print(mx)
print(nl)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238836.html