python文件二進制加密,python給文件加密

本文目錄一覽:

怎樣對 Python 源碼加密

代碼加密

大概整理了以下幾種方法:

編譯成pyc文件

使用py2exe將python代碼轉成window下執行的exe文件

關鍵代碼部分使用c或者c++寫,然後在python中調用

用C寫一個license,進行license驗證

作為一門解釋型的語言,加密的難度超級大。下面來簡單分析上面的解決方案:

編譯成pyc文件幾乎跟pyc沒有區別,保護力度太低

要是在linux機器上就沒法使用,而且這種exe文件也可以被破解的

核心代碼部分是計算密集型,用的是pandas,numpy等庫,用c重寫,簡直不可能,工作量太大。

沒搞過,不知道………

看來上面的解決方案都是不行的,在stackoverflow上對這個問題也進行了詳細的討論,用我蹩腳的英文來翻譯(意譯)一下得票率最高的:

“有什麼方法來解決這個問題嗎?(加密的問題)”沒有。任何保護都可以被逆向工程破解。就連DVD機的固件都可以被破解,儘管法律判定其為非法,但是AACS加密密鑰還是泄露出來。

因為沒有技術的方法可以阻止你的客戶看你的代碼,你必須用傳統的商業方法。

1. 許可證,合約,條款,條件。只要用戶簽訂了這些東西,及時用戶可以看見代碼,也會有法律約束(不過此建議在中國目前貌似不頂用)

2. 提供巨大的價值。如果你的東西非常好,而且價格很合理,那麼用戶很難拒絕——沒必要浪費時間和金錢去搞逆向工程啥的,因為逆向工程是很費銀子的。讓你的產品有足夠的性價比。

3. 經常性的升級和增加新的功能,使得逆向工程不那麼好使。當下一個版本破壞了逆向工程,那麼以前的破解就沒有意義了。

4. 定製化生產,為不同的客戶提供不同的產品。(貌似代價有點高啊)

5. 使用有時間限制的許可證,這會給你帶來不好的名聲,但是會保證你的軟件會停止工作

6. 設計為web service.

代碼混淆

既然加密不是一個好方法,那要還是不死心,那就做一個簡單的混淆算了,雖然只能”防君子,不防小人“。但是不能就這樣把代碼暴露出來。

這裡推薦一個找了好久的東西: pyobfuscate這個東西在window7中的cmd中貌似總是混淆失敗,無奈用了MINGW32,居然搞定了。官方的資料有這樣的介紹:

pyobfuscate有幾種轉化代碼的方式,有些可逆,有些不可逆。

移除注釋和文檔 ( 不可逆)

改變縮進(可逆)

在tokens之間加入空格(一定程度上可逆)

重命名函數,類,和變量(不可逆)

在空白行中加入無效的代碼

我沒有選擇混淆函數名和類名,因為其他地方還要調用呢。下面是我混淆的結果,還挺好看的:

def my_fuction_to_test ( self , start_date , end_date ) :

iiiii11iII1 = self . get_something ( start_date , end_date )

O0o = [ ]

for oO0 in iiiii11iII1 :

if oO0 [ “isOpen” ] == 1 :

IIIi1i1I = { }

OOoOoo00oo = dt . strptime ( oO0 [ ‘calendarDate’ ] , ‘%Y-%m-%d’ )

IIIi1i1I [ ‘day’ ] = OOoOoo00oo . strftime ( ‘%Y%m%d’ )

IIIi1i1I [ ‘week’ ] = oO0 [ ‘isWeekEnd’ ]

IIIi1i1I [ ‘month’ ] = oO0 [ ‘isMonthEnd’ ]

IIIi1i1I [ ‘weekday’ ] = OOoOoo00oo . weekday ( )

O0o . append ( IIIi1i1I )

iiI11 = pd . DataFrame ( O0o )

return iiI11

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支持哪些加密方法

Python本身應該什麼加密算法都沒有吧,如果想要加密可以找一些模塊

python語言可以加密嗎

我們所說的加密方式都是對二進制編碼的格式進行加密,對應到python中,則是我們的bytes.

所以當我們在Python中進行加密操作的時候,要確保我們的操作是bytes,否則就會報錯.

將字符串和bytes互相轉換可以用encode()和decode()方法,如下所示:

注:兩位十六進制常常用來顯示一個二進制字節.

推薦學習《python教程》。

為什麼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文件加密

簡單模式:

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()

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/237659.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:06
下一篇 2024-12-12 12:06

相關推薦

  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • 蝴蝶優化算法Python版

    蝴蝶優化算法是一種基於仿生學的優化算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化算法Python版…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智能、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29

發表回復

登錄後才能評論