本文目錄一覽:
Python可以給db文件添加密碼
可以給db文件添加密碼。
在Python中異或操作符為,^,也可以記作XOR。按位異或的意思是。相同值異或為0,不同值異或為1.具體來講,有四種可能,0^0=0,0^1=1,1^0=1,1^1=0。我們還可總結出規律(A為0或1),0和A異或為A本身。1和A異或為A反。
加密操作,首先將文件轉換成二進制數,再生成與該二進制數等長的隨機密鑰,將二進制數與密鑰進行異或操作,得到加密後的二進制數。解密操作,將加密後的二進制程序與密鑰進行異或操作,就得到原二進制數,最後將原二進制數恢復成文本文件。
怎麼樣給python文件加密
簡單模式:
from hashlib import md5
def md5_file(name):
m = md5()
a_file = open(name, ‘rb’) #需要使用二進制格式讀取文件內容
m.update(a_file.read())
a_file.close()
return m.hexdigest()
if __main__ == ‘__init__’:
print md5_file(‘d:/test.txt’)
大文件速度更快一點的方式
#!/usr/bin/python
#encoding=utf-8
import io
import sys
import hashlib
import string
def printUsage():
print (””’Usage: [python] pymd5sum.py ”’)
def main():
if(sys.argv.__len__()==2):
#print(sys.argv[1])
m = hashlib.md5()
file = io.FileIO(sys.argv[1],’r’)
bytes = file.read(1024)
while(bytes != b”):
m.update(bytes)
bytes = file.read(1024)
file.close()
#md5value = “”
md5value = m.hexdigest()
print(md5value+”\t”+sys.argv[1])
#dest = io.FileIO(sys.argv[1]+”.CHECKSUM.md5″,’w’)
#dest.write(md5value)
#dest.close()
else:
printUsage()
main()
樹莓派安裝cython加密python文件
1.安裝cython
sudo apt-get install cython
2.目標加密文件dataHandle.py,cd到文件目錄下
sudo cython -a dataHandle.py
3. 把生成的dataHandle.c 變成dataHandle.so
gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I/usr/include/python3.7 -o dataHandle.so dataHandle.c
4.刪掉dataHandle.py,只留dataHandle.so,再次執行項目正常運行不受影響。
windows平台快捷打包方法:
1. pip install pyinstaller
2. cd 到程序文件加下
3. pyinstaller main.py 成功後dist文件夾下生成main.exe(刪除其他的源程序,留下main.exe)
為什麼python不可加密
可以加密。 python 代碼加密甚至可以做到比用彙編手寫混淆,用 c 手寫混淆更加難以解密。具體做法略複雜僅簡單說個過程。
第一級別是源碼級別的混淆,用 ast 和 astor ,再自己手寫一個混淆器,三五百行的腳本直接混淆到幾萬行,整個文件面目全非,基本可以做到就算直接放腳本給你拿去逆,除非你再寫出來一個逆向前面的混淆算法的腳本來逆(在熟悉 python 的情況下需要花幾天,且不說需要了解程序構造原理),手動去調試腳本幾乎達到不可行的地步(話費時間再乘以 2 )
第二級別是個性化定製 pyinstaller , pyinstaller 會打包所有需要的庫,將腳本也包含進打包的 exe ,但是, pyinstaller 有一個 stub ,相當於一個啟動器,需要由這個啟動器來解密腳本和導入模塊,外面有直接導出腳本的工具,但是那是針對 pyinstaller 自帶的啟動器做的,完全可以自己修改這個啟動器再編譯,這樣逆向者就必須手動調試找到 main 模塊。配合第一級別加密,呵呵,中國就算是最頂尖的逆向專家也要花個一兩周,來破解我們的程序邏輯了,就我所知,實際上國內對於 py 程序的逆向研究不多。
第三級別是再上一層,將 py 翻譯為 c 再直接編譯 c 為 dll ,配合第一階段先混淆再轉 c 再編譯,在第一步混淆之後,會產生非常多垃圾(中間層)函數,這些中間層函數在 c 這裡會和 py 解釋器互相調用,腳本和二進制之間交叉運行,本身混淆之後的源碼就極難復原,再混合這一層,想逆向,難。
第四級別是利用 py 的動態特性,絕大多數逆向者都是 c ,彙編出身,對於程序的第一直覺就是,程序就是一條一條的指令,後一條指令必然在這一條指令後面,然而, py 的動態特性可以讓代碼邏輯根本就不在程序裏面,這一點不想多講,涉及到我一個項目里的深度加密。
第五級別,數學做牆。了解過比特幣原理的知道要想用挖比特幣就得提供大量算力去幫網絡計算 hash ,這個成為 pow ,那麼既然已經採用 py 了估計已經不考慮太多 cpu 利用率了,那就可以採用 pow (還有其他的手段)確保程序運行時擁有大量算力,如果程序被單步調試,呵呵,一秒鐘你也跑不出來幾個 hash 直接拉黑這個 ip (這個說法可能比較難理解,因為我第四層的加密沒有說明,不過意思就是拒絕執行就對了)
python語言可以加密嗎
我們所說的加密方式都是對二進制編碼的格式進行加密,對應到python中,則是我們的bytes.
所以當我們在Python中進行加密操作的時候,要確保我們的操作是bytes,否則就會報錯.
將字符串和bytes互相轉換可以用encode()和decode()方法,如下所示:
注:兩位十六進制常常用來顯示一個二進制位元組.
推薦學習《python教程》。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/227650.html