目錄
基礎知識
在 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 反。
讓我們想看看一位二進位制數滿足的性質:
一位二進位制數與自身的異或值為 0
b ^ b = 0
異或操作滿**換律
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
0 與 a 的異或為 a
(a ^ b) ^ = a ^ (b ^ b) = a ^ 0 = a
易知,對任意長二進位制數都滿足上述性質。
通過了解異或操作的性質,加密原理就非常清晰了。
首先將檔案轉換成二進位制數,再生成與該二進位制數等長的隨機密程式設計客棧鑰,將二進位制數與金鑰進行異或操作,得到加密後的二進位制數。
將加密後的二進位制程式與金鑰進行異或操作,就得到原二進位制數,最後將原二進位制數恢復成文字檔案
secrets 庫是 python 3.6 引入的偽隨機數模組,適合生成隨機金鑰。token_bytes 函式接受一個 int 引數,用於指定隨機位元組串的長度。int.from_bytes 把位元組串轉換為 int,也就是我們需要的二進位制數。
encrypt 函式接受一個 str 對程式設計客棧象,返回元組 (int, inwww.cppcns.comt)。通過 encode 方法,我們將字串編碼成位元組串。int.from_bytes 函式將位元組串轉換為 int 物件。最後對二進位制物件和隨機金鑰進行異或操作,就得到了加密文字。
decrypt 接受兩個 int 物件,分別為加密文字和隨機金鑰。首先對兩者進行異或操作,計算解密出來的 int 物件所佔位元數。decrypted.bit_length 函式得到的是二進位制數的位數,除以 8 可以得到所佔位元大小。為了防止,1 ~ 7 位的二進位制數整除 8 得到 0,所以要加上 7,然後再進行整除 8 的操作。使用 int.to_bytes 函式將解密之後的 int 的物件轉換成 bytes 物件。最後通過 decode 方法,將位元組串轉換成程式設計客棧字串。
利用上述函式,我們可以很輕鬆對文字檔案進行加密、解密操作。
path 為待加密檔案的地址,如果不指定金鑰地址,則在該目錄下新建目錄和檔案。
執行完加密、解密檔案操作,得到的解密檔案與原檔案相同
以上就是 python 加密檔案的全部內容,還請大家多多**支援,希望大家以後多多支援我們!
本文標題: python教程自己實現軟體加密功能
本文地址:
NBearV3教程 實體配置檔案加密篇
1.0 2006 11 18 本教程介紹 nbearv3 中的實體配置檔案的加密支援。通過本教程,讀者應能夠全面掌握加密實體配置檔案和如何結合使用 asp.net 的配置節加密功能,實現部署環境關聯的實體配置加密。本教程不包含任何演示 10 分鐘。要啟用實體配置檔案加密,需要如下設定 entityc...
DSP28335 Mcbsp SPI實現軟體片選
思路是把fsx 片選 引腳設定為gpio腳,控制輸出 具體 如下 管腳初始化函式修改如下 initmcbspbgpio void mcbsp初始化函式修改如下 void init mcbsp spi if data size 16 run a loopback test in 16 bit mode...
自己實現一個簡單的ftp軟體
近期面試有個機試題是寫個ftp軟體,自己寫完不想就扔了,就放到這裡大家參考一下,也幫我優化優化,沒什麼太難的也就不需要什麼註釋了 服務端 include include include include include include include include define compare a,...
自己實現find if,自己實現傳遞謂詞
include include template class init class pr inline init myfind if init first,init last,pr pred return first int tmain int argc,tchar ar auto p myfind...
軟體破解教程3
possible stringdata ref from code obj 註冊成功 00488df2 68d48e4800 push 00488ed4 整理一下 註冊名 suunb ccg 註冊碼 71c20edc or 25170288 其實如果你坐在那裡肯花上一杯茶的功夫來仔細想一下,就會知道...
pathfinder2017軟體教程
pathfinder2017軟體教程 toc 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,瞭解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdow...
軟體教程 Jupyter
開啟 anaconda prompt 執行下列 jupyter notebook generate configc users administrator jupyter找到 jupyter notebook 可執行檔案,右鍵屬性設定,在目標欄刪除最後的 userprofile 修改完畢後,重啟 j...
軟體架構實現
溫故而知新,將 軟體架構設計 一書一遍遍的讀,看到深處方覺得更像是一本修身養性的書。我覺得不是每個專案都適合採用所有技術去做架構設計,本身有很多都是作用重複,可以靈活選擇的。軟體架構設計首要是建立領域模型,領域模型是與客戶和使用者之間溝通的橋樑 其次是概念架構設計,概念架構設計同專案經理達成一致,確...
RAID 1 軟體實現(Windows 系統)
實現raid有2種方式 軟體 raid 的效能較低,因為其使用主機的資源。需要載入 raid 軟體以從軟體 raid 卷中讀取資料。在載入 raid 軟體前,作業系統需要引導起來才能載入 raid 軟體。在軟體 raid 中無需物理硬體。零成本投資。硬體 raid 的效能較高。他們採用 pci ex...
python自己實現PCA降維
coding utf 8 usr bin python import numpy as np x np.array 1,2,3 2,3,4 1,2,5 1,5,6 2,5,7 1,7,2 4,1,1 x mean np.mean x,axis 0 取均值 x nor x x mean 計算協方差 x...