我爸電腦上有個加密壓縮包,我給用 Python 給解開了

      網友投稿 976 2025-03-31

      老爸說他有個照片文件夾打不開了,讓我過去看看,一瞅,好家伙,加密壓縮包塵封老照片呀。

      既然加密,沒準還有意外收貨。

      作為一個“精靈鬼”,這么有價值的數據,我必須幫老爸解開呀

      尋找思路

      解密壓縮包的思路是什么?

      答:通過各種密碼去嘗試解壓文件。

      用什么解壓文件?

      答:zip 使用 zipfile,rar 使用 rarfile,已經有 Python 大佬給我們寫好啦,只需要調用它們的方法即可。

      密碼從哪里找?

      答:程序自行運算或者找密碼本。

      思路整理清楚之后,就可以開始了。

      zipfile 與 rarfile

      zipfile:Python 內置,無需安裝;

      rarfile:需要安裝一下,文檔參照:https://rarfile.readthedocs.io/api.html。

      解壓文件使用二者生成對象的 extractall 方法即可。

      以下內容以 zipfile 庫進行舉例,舉一反三即可。

      先默默通過 zipfile 解壓一個沒有密碼的文件,試試手感。

      測試文件自己進行打包壓縮即可,先嘗試英文或者數字文件命名,在嘗試中文命名。

      import zipfile try: # 創建 ZipFile 對象 with zipfile.ZipFile('測試文件.zip') as zfile: # 解壓文件 zfile.extractall(path='./') print('文件解壓成功') except: print('失敗啦!')

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      完成任務,成功解壓文件,zip 文件和 python 代碼放置在同一目錄。

      解壓帶密碼的文件

      下面假裝不知道密碼,通過密碼進行解壓,設置密碼為 1234。

      import zipfile try: # 創建 ZipFile 對象 with zipfile.ZipFile('511.zip') as zfile: # 解壓文件 zfile.extractall(path='./', pwd=b"1234") print('文件解壓成功') except: print('失敗啦!')

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      成功解壓,后文就可以通過這種思路,對壓縮包進行解壓。

      中文亂碼問題

      在測試的時候,還發現了如果文件名是中文,解壓之后文件名出現亂碼情況,修正它。

      找到 Python 安裝中的 Lib 文件夾,然后打開 zipfile.py 文件,直接修改源碼。

      搜索 fname_str = fname.decode("cp437"),再后面添加如下內容。

      fname_str = fname_str.encode("cp437").decode('gbk')

      1

      搜索 filename = filename.decode('cp437'),再后面追加如下代碼。

      filename = filename.encode("cp437").decode('gbk')

      1

      保存該文件,再對測試文件進行解壓,解壓成功,文件名無錯誤。

      解密文件

      進入正式環節,接下來就要解密老爸的壓縮包了,這么有價值的壓縮包,可別打不開。

      假設老爸的密碼是 4 位,可以直接編寫如下代碼進行測試。

      提前準備測試壓縮包,密碼為了好破解設置為 aaaf,代碼如下:

      import zipfile def ext_file(pwd): try: # 創建 ZipFile 對象 with zipfile.ZipFile('測試中文.zip') as zfile: # 解壓文件 zfile.extractall(path='./', pwd=pwd.encode('utf-8')) print('文件解壓成功') return True except Exception as e: print('失敗啦!', e) return False # 先“細致入微”的實現一下,以后有好思路在修改 def get_pwds(my_password_str): for i1 in range(len(my_password_str)): for i2 in range(len(my_password_str)): for i3 in range(len(my_password_str)): for i4 in range(len(my_password_str)): yield my_password_str[i1] + my_password_str[i2] + my_password_str[i3] + my_password_str[i4] if __name__ == '__main__': my_password_str = "abcdefghijklmnopqrstuvwxyz0123456789" for pwd in get_pwds(my_password_str): print("正在測試密碼:", pwd) yield_pwd = pwd ret = ext_file(yield_pwd) if ret: print("解密成功,密碼是", yield_pwd) break

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      非常簡單的運行幾秒之后,文件解壓成功。

      正在測試密碼: aaaa 失敗啦! Bad password for file '測試中文.txt' 正在測試密碼: aaab 失敗啦! Bad password for file '測試中文.txt' 正在測試密碼: aaac 失敗啦! Bad password for file '測試中文.txt' 正在測試密碼: aaad 失敗啦! Bad password for file '測試中文.txt' 正在測試密碼: aaae 失敗啦! Bad password for file '測試中文.txt' 正在測試密碼: aaaf 文件解壓成功 解密成功,密碼是 aaaf

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      此時相信大佬們已經發現問題,如果密碼不是 4 位,是不確定的位數,那我那一處細致入微的循環操作,就要修改了。

      而且我不知道老爸的密碼是多少位數的,這就有點難度了。

      更加優秀的解法

      在 Python 中已經內置好了一個迭代器,可用于從一個字符串中固定的取出指定位數的密碼,測試代碼如下:

      import itertools my_pwdstr = 'abcdefghijklmnopqrstuvwxyz0123456789' def ret_pwd(): for x in itertools.permutations(my_pwdstr, 4): yield ''.join(x) for item in ret_pwd(): print(item)

      1

      2

      3

      4

      5

      6

      7

      我爸電腦上有個加密壓縮包,我給用 Python 給解開了

      8

      上述代碼用到了 itertools.permutations ,該函數的用法如下:

      # 函數原型 itertools.permutations(iterable, r=None)

      1

      2

      連續返回由 iterable 元素生成長度為 r 的排列。

      如果 r 未指定或為 None ,r 默認設置為 iterable 的長度,這種情況下,生成所有排列。

      所以使用上述代碼,可以快速的生成指定位數的密碼,后續只需要傳入老爸密碼的位數,即可不變動代碼就進行程序測試了。

      import zipfile import itertools def ext_file(pwd): try: # 創建 ZipFile 對象 with zipfile.ZipFile('測試中文.zip') as zfile: # 解壓文件 zfile.extractall(path='./', pwd=pwd.encode('utf-8')) print('文件解壓成功') return True except Exception as e: print('失敗啦!', e) return False def get_pwds(my_password_str, nums): for x in itertools.permutations(my_password_str, nums): yield ''.join(x) if __name__ == '__main__': my_password_str = "abcdefghijklmnopqrstuvwxyz0123456789" for pwd in get_pwds(my_password_str, 4): print(len(pwd)) print("正在測試密碼:", pwd) yield_pwd = pwd ret = ext_file(yield_pwd) if ret: print("解密成功,密碼是", yield_pwd) break

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      經過改良之后,你可以動態控制密碼的長度了,如果需要特殊符號也可以繼續擴充 my_password_str 字符串。

      擴展思路

      密碼的獲取一定要自己生成嗎?

      答:有種文件叫做密碼本,所以去找到一些,然后逐行讀取就好了。

      一個個的解密太慢了,有高效的辦法嗎?

      答:多線程或者多進程破解,一個進程讀一個密碼本,每個進程下面在啟用幾個線程去分段解析密碼。

      事件后續

      代碼雖然寫好了,但文件解密我用多線程輪詢了 2 天,還是沒有解開(相當真實的體驗了)。

      由于不知道密碼組成和密碼位數,也不知道算到何年何月去了,我決定還是從老爸那里在找找突破口,“逼問了”一下常用的密碼,尤其是知道其銀行卡密碼之后,得到重要突破點。

      解密結果:最終的最終嘗試一周之后,文件解開了,密碼不復雜,姓的首字母+123789。

      本因為是我的姓名+生日,最后得一波感動,然而我還是多慮啦,哈哈哈。

      今天是持續寫作的第

      152

      / 200 天。

      求、求評論、求。

      有任何疑問都可以在評論區詢問,有問必答~

      本文,以后沒準能用到哦~

      Python 任務調度

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Word2016文檔中表格數據進行排序的方法
      下一篇:剛才不小心關閉了呼圖壁縣總工會4月“民族團結一家親”活動小結,怎么找回
      相關文章
      亚洲国产小视频精品久久久三级 | 久久精品国产亚洲AV网站| 亚洲av片在线观看| 亚洲一区二区久久| 亚洲人成激情在线播放| 亚洲精品美女久久久久9999| 亚洲黄网站wwwwww| 亚洲福利一区二区| 亚洲综合一区二区| 亚洲国产成人久久| 亚洲AV一二三区成人影片| 亚洲娇小性色xxxx| 亚洲综合无码一区二区痴汉 | 在线观看日本亚洲一区| 国产日本亚洲一区二区三区| 中国china体内裑精亚洲日本| 亚洲六月丁香婷婷综合| 亚洲欧美日韩综合久久久| 亚洲av永久无码精品秋霞电影秋 | 精品久久亚洲一级α| 婷婷亚洲天堂影院| 亚洲 日韩经典 中文字幕| 亚洲一级毛片视频| 亚洲色无码专区一区| 中文有码亚洲制服av片| 亚洲av日韩av永久无码电影| 亚洲AV蜜桃永久无码精品| 亚洲精品高清一二区久久| 亚洲日本中文字幕一区二区三区| 久久久久久亚洲精品不卡| 亚洲开心婷婷中文字幕| 久久青青成人亚洲精品| 久久精品国产亚洲AV无码娇色| 亚洲欧洲精品国产区| 亚洲国产成人精品激情| 国产亚洲精品AAAA片APP| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲精品你懂的在线观看| 亚洲国产精品一区| 亚洲一区二区三区久久| 亚洲AV无码专区亚洲AV桃|