python加密打包程序詳解
python加密打包程序
加密方式:將py文件轉(zhuǎn)為pyd格式
- 安裝easycython模塊 pip install easycython
- 使用easycython命令將py轉(zhuǎn)pyd: easycython xx.py, 會在同一目錄生成xx.pyd(如果是64位系統(tǒng)生成的文件名為xx.cp36-win_amd64.pyd);
- 將xx.cp36-win_amd64.pyd重命名為xx.pyd;
- 使用pyinstaller打包(由于xx.py和xx.pyd在同一目錄, pyinstaller會優(yōu)先打包pyd), 打包時添加—hidden-import xx選項.
- 生成的打包文件中會包含xx.pyd;
- 注意: 如果打包時使用了—key選項, 但打包的模塊是pyd格式的, 則pyd文件不會被加密, 只是打包
打包腳本:
打包參數(shù)說明:
- -F:僅僅生成一個文件,不暴露其他信息,啟動較慢。
- -D:生成一個文件夾,里面是多文件模式,啟動快。
- -w:窗口模式打包,不顯示控制臺。
示例
pyinstaller -F -w -i logo.ico python_file1.py python_file2.py python_file3.py
補充:Python實現(xiàn)文件簡單加解密
一、基礎(chǔ)知識
python中的異或操作符為 ^ ,也記作XOR,按位異或的結(jié)果是:值相同時異或為0,值不同時異或為1,一共有四種情況:0 ^ 0 = 0,0 ^ 1 = 1,1 ^ 0 = 1,1 ^ 1 = 0,使用異或可以對文件進行簡單的加解密操作。
加密操作:首先將文件轉(zhuǎn)換為二進制數(shù),再隨機生成一個與該二進制等長的密鑰,將文件的二進制數(shù)與密鑰進行異或操作,就能得到加密后的二進制數(shù),存儲為加密文件。
解密操作:將加密后的二進制文件與密鑰再進行異或操作,就能得到原二進制數(shù),再將原二進制數(shù)恢復(fù)成文件。
二、加解密算法
1.導(dǎo)入運行庫
import json from pathlib import Path from secrets import token_bytes import argparse
2.定義生成密鑰函數(shù)
def random_key(length):
key = token_bytes(nbytes=length) #根據(jù)指定長度生成隨機密鑰
key_int = int.from_bytes(key, 'big') #將byte轉(zhuǎn)換為int
return key_int3.定義加解密單元
def encrypt(raw): #加密單元
raw_bytes = raw.encode() #將字符串編碼成字節(jié)串
raw_int = int.from_bytes(raw_bytes, 'big') #將byte轉(zhuǎn)換成int
key_int = random_key(len(raw_bytes)) #根據(jù)長度生成密鑰
return raw_int ^ key_int, key_int #將密鑰與文件異或,返回異或后的結(jié)果和密鑰
def decrypt(encrypted, key_int): #解密單元
decrypted = encrypted ^ key_int #將加密后的文件與密鑰異或
length = (decrypted.bit_length() + 7) // 8 #計算所占比特大小
decrypted_bytes = int.to_bytes(decrypted, length, 'big') #將int轉(zhuǎn)換回byte
return decrypted_bytes.decode() #解碼后返回4.加密文件
def encrypt_file(path, key_path=None, *, encoding='utf-8'): #參數(shù)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()
//打開文件并將內(nèi)容寫入
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)5.解密文件
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")
到此這篇關(guān)于python加密打包程序的文章就介紹到這了,更多相關(guān)python加密打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python面向?qū)ο笾蓡T相關(guān)知識總結(jié)
通過面向?qū)ο筮M行編程時,會遇到很多種情況,也會使用不同的成員來實現(xiàn),接下來我們來逐一介紹成員特性和應(yīng)用場景,需要的朋友可以參考下2021-06-06
mac 安裝python網(wǎng)絡(luò)請求包requests方法
今天小編就為大家分享一篇mac 安裝python網(wǎng)絡(luò)請求包requests方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
關(guān)于Python使用turtle庫畫任意圖的問題
這篇文章主要介紹了Python turtle庫畫任意圖,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
基于python的Tkinter實現(xiàn)一個簡易計算器
這篇文章主要介紹了基于python的Tkinter實現(xiàn)一個簡易計算器的相關(guān)資料,還為大家分享了僅用用50行Python代碼實現(xiàn)的簡易計算器,感興趣的小伙伴們可以參考一下2015-12-12
計算機二級python學(xué)習(xí)教程(1) 教大家如何學(xué)習(xí)python
這篇文章主要為大家詳細介紹了計算機二級python學(xué)習(xí)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05

