您好,登錄后才能下訂單哦!
這篇文章主要介紹“python加密打包程序的方法是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“python加密打包程序的方法是什么”文章能幫助大家解決問題。
加密方式:將py文件轉為pyd格式
安裝easycython模塊 pip install easycython
使用easycython命令將py轉pyd: easycython xx.py, 會在同一目錄生成xx.pyd(如果是64位系統生成的文件名為xx.cp36-win_amd64.pyd);
將xx.cp36-win_amd64.pyd重命名為xx.pyd;
使用pyinstaller打包(由于xx.py和xx.pyd在同一目錄, pyinstaller會優先打包pyd), 打包時添加—hidden-import xx選項.
生成的打包文件中會包含xx.pyd;
注意: 如果打包時使用了—key選項, 但打包的模塊是pyd格式的, 則pyd文件不會被加密, 只是打包
打包腳本:
打包參數說明:
-F:僅僅生成一個文件,不暴露其他信息,啟動較慢。
-D:生成一個文件夾,里面是多文件模式,啟動快。
-w:窗口模式打包,不顯示控制臺。
示例
pyinstaller -F -w -i logo.ico python_file1.py python_file2.py python_file3.py
python中的異或操作符為 ^ ,也記作XOR,按位異或的結果是:值相同時異或為0,值不同時異或為1,一共有四種情況:0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,使用異或可以對文件進行簡單的加解密操作。
加密操作:首先將文件轉換為二進制數,再隨機生成一個與該二進制等長的密鑰,將文件的二進制數與密鑰進行異或操作,就能得到加密后的二進制數,存儲為加密文件。
解密操作:將加密后的二進制文件與密鑰再進行異或操作,就能得到原二進制數,再將原二進制數恢復成文件。
import json from pathlib import Path from secrets import token_bytes import argparse
def random_key(length): key = token_bytes(nbytes=length) #根據指定長度生成隨機密鑰 key_int = int.from_bytes(key, 'big') #將byte轉換為int return key_int
def encrypt(raw): #加密單元 raw_bytes = raw.encode() #將字符串編碼成字節串 raw_int = int.from_bytes(raw_bytes, 'big') #將byte轉換成int key_int = random_key(len(raw_bytes)) #根據長度生成密鑰 return raw_int ^ key_int, key_int #將密鑰與文件異或,返回異或后的結果和密鑰 def decrypt(encrypted, key_int): #解密單元 decrypted = encrypted ^ key_int #將加密后的文件與密鑰異或 length = (decrypted.bit_length() + 7) // 8 #計算所占比特大小 decrypted_bytes = int.to_bytes(decrypted, length, 'big') #將int轉換回byte return decrypted_bytes.decode() #解碼后返回
def encrypt_file(path, key_path=None, *, encoding='utf-8'): #參數path指定文件地址 path = Path(path) cwd = path.cwd() / path.name.split('.')[0] path_encrypted = cwd / path.name if key_path is None: key_path = cwd / 'key' if not cwd.exists(): cwd.mkdir() path_encrypted.touch() key_path.touch() //打開文件并將內容寫入 with path.open('rt', encoding=encoding) as f1, \ path_encrypted.open('wt', encoding=encoding) as f2, \ key_path.open('wt', encoding=encoding) as f3: encrypted, key = encrypt(f1.read()) json.dump(encrypted, f2) json.dump(key, f3)
def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'): path_encrypted = Path(path_encrypted) cwd = path_encrypted.cwd() path_decrypted = cwd / 'decrypted' if not path_decrypted.exists(): path_decrypted.mkdir() path_decrypted /= path_encrypted.name path_decrypted.touch() if key_path is None: key_path = cwd / 'key' with path_encrypted.open('rt', encoding=encoding) as f1, \ key_path.open('rt', encoding=encoding) as f2, \ path_decrypted.open('wt', encoding=encoding) as f3: decrypted = decrypt(json.load(f1), json.load(f2)) f3.write(decrypted)
將要加密的文件放到py文件同級目錄下,運行以下將1.txt加密。
encrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")
將要解密的文件和密鑰放到py文件同級目錄下,運行以下將1.txt解密還原。
decrypt_file("D:/PyCharm Community Edition 2021.3.2/Workplace/encryption/1.txt")
關于“python加密打包程序的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。