Python實現文件訪問和加密GUI應用程序

Python實現文件訪問和加密

簡單的文本文件加密和解密的GUI應用程序,實現了一個簡單的凱撒密碼加密和解密算法

運行效果

1.實現UI界面

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yG28ajb1-1720676735133)(https://i-blog.csdnimg.cn/direct/e5130309995b46279478a09dd013c689.png)]

2.打開原始文件,顯示的文件名和文件內容正確。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QhQldndf-1720676735135)(https://i-blog.csdnimg.cn/direct/cd86486c99fd4250bd37fc7d89302ffb.png)]

3. 對照原始文件,加密文件正確

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-V1pBHV4D-1720676735136)(https://i-blog.csdnimg.cn/direct/6e6b8a4bd0fe4d5bb280b5923f003047.png)][外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-qekLqZO3-1720676735136)(https://i-blog.csdnimg.cn/direct/60a3b76e467d4d80b488498f2695cd68.png)]

4. 對照原始文件,解密文件一致

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5xguLPdD-1720676735137)(https://i-blog.csdnimg.cn/direct/7098e13c57e14097bf47933c7cf6a8f7.png)] [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Shk3FOQl-1720676735138)(https://i-blog.csdnimg.cn/direct/a21a85c406384c1cbe4a6b55d3babca9.png)]

5.測試使用不同的秘鑰進行加密解密,結果正確

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vXF6sfK7-1720676735138)(https://i-blog.csdnimg.cn/direct/079dcb23a6454d7cb32778fa93fd8907.png)]

6. 對程序進行錯誤測試

6.1 沒有打開文件直接進行加密,程序不應崩潰。
6.2 沒有打開文件直接進行解密,程序不應崩潰。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nn4VMZwl-1720676735139)(https://i-blog.csdnimg.cn/direct/5ee623222a62464c867c57d42ab3ae12.png)]

6.3 沒有設定秘鑰直接進行加密,程序不應崩潰。
6.4 沒有設定秘鑰直接進行解密,程序不應崩潰。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-g3dPN9bk-1720676735139)(https://i-blog.csdnimg.cn/direct/aeb6b2e4fa794dfab70def9f1d5b8b30.png)]

6.5 秘鑰設定錯誤,進行加密,程序不應崩潰。
6.6 秘鑰設定錯誤,進行解密,程序不應崩潰。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-HD2QHdUp-1720676735141)(https://i-blog.csdnimg.cn/direct/4ae9ce7dd9534ea093f7f78fa84a2a46.png)]

代碼

導入必要的庫和模塊

from tkinter import *:導入Tkinter庫,這是Python的標準GUI庫。
from tkinter.filedialog import askopenfilename, asksaveasfilename:導入Tkinter庫中用于選擇文件和保存文件的對話框功能。
from Caesar import Caesar:導入自定義的Caesar密碼算法類。

FileEncryptWindow類:

創建了Tkinter窗口并添加了兩個Frame容器,分別用于文件名輸入和密鑰輸入。
在文件名輸入區域,有一個Entry控件用于顯示選擇的文件名,以及一個"打開"按鈕觸發openFile方法來選擇要加密/解密的文件。
在密鑰輸入區域,有一個Entry控件用于輸入密鑰(默認為3),以及"加密"和"解密"按鈕分別觸發encryptFile和decryptFile方法。
在窗口底部,有一個Text控件用于顯示文件的內容。

class FileEncryptWindow():def __init__(self):window = Tk()frame1 = Frame(window)frame1.pack()labelFileName = Label(frame1, text="文件名:", )labelFileName.grid(row=0, column=0)self.fileName = StringVar()entryFileName = Entry(frame1, width=100, textvariable=self.fileName)entryFileName.grid(row=0, column=1)btnOpen = Button(frame1, text="打開", command=self.openFile)btnOpen.grid(row=0, column=2)frame2 = Frame(window)frame2.pack()labelKey = Label(frame2, text="密鑰:", )labelKey.grid(row=1, column=0)self.key = StringVar()entryKey = Entry(frame2, textvariable=self.key)self.key.set("3")entryKey.grid(row=1, column=1)btnEncrypt = Button(frame2, text="加密", command=self.encryptFile)btnEncrypt.grid(row=1, column=2)btnDecrypt = Button(frame2, text="解密", command=self.decryptFile)btnDecrypt.grid(row=1, column=3)self.text = Text(window)self.text.pack()window.mainloop()def openFile(self):inFileName = askopenfilename()inFile = open(inFileName, "r")self.fileName.set(inFileName)self.fileContext = inFile.read()self.text.delete(1.0, END)self.text.insert(END, self.fileContext)inFile.close()def encryptFile(self):key = eval(self.key.get())caesar = Caesar(key)encryptStr = caesar.encrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(encryptStr)outFile.close()def decryptFile(self):key = eval(self.key.get())caesar = Caesar(key)decryptStr = caesar.decrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(decryptStr)outFile.close()

Caesar類

Caesar類提供了一個基本的凱撒密碼加密和解密功能,可以與前面介紹的GUI應用程序一起使用。用戶只需要輸入密鑰,就可以對文件內容進行加密和解密操作

  • encrypt(self, Text):實現對輸入文本Text的加密。遍歷輸入文本的每個字符,如果字符在self.biao中出現,則找到該字符在self.biao中的索引位置。然后將該索引加上密鑰self.miyao,并對字符集長度取余,得到密文字符在self.biao中的新索引。最后,將新索引對應的字符添加到cipText字符串中,形成最終的密文。返回加密后的密文字符串。
  • decrypt(self, cipText):實現了對輸入密文cipText的解密。與encrypt方法類似,但是將索引減去密鑰self.miyao,而不是加上。解密時,同樣對字符集長度取余,得到明文字符在self.biao中的索引。將明文字符添加到clearText字符串中,形成最終的明文。方法返回解密后的明文字符串。
class Caesar:def __init__(self, miyao):self.miyao = miyaoself.biao = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 `-=~!@#$%^&*()_+,./<>?{}|[]\\;:\'\""def encrypt(self,Text):cipText = ""for char in Text:if char in self.biao:index = self.biao.find(char)cipherIndex = (index + self.miyao) % len(self.biao)cipText += self.biao[cipherIndex]return cipTextdef decrypt(self,cipText):clearText = ""for char in cipText:if char in self.biao:index = self.biao.find(char)clearIndex = (index - self.miyao) % len(self.biao)clearText += self.biao[clearIndex]return clearText

調用方法

# 創建Caesar類的實例,密鑰為3
caesar = Caesar(3)
# 加密文本"Hello, world!"
encrypted_text = caesar.encrypt("Hello, world!")
print("Encrypted text:", encrypted_text)
# 解密密文
decrypted_text = caesar.decrypt(encrypted_text)
print("Decrypted text:", decrypted_text)

總代碼

from tkinter import *
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfilename
class Caesar:def __init__(self, miyao):self.miyao = miyaoself.biao = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 `-=~!@#$%^&*()_+,./<>?{}|[]\\;:\'\""def encrypt(self,Text):cipText = ""for char in Text:if char in self.biao:index = self.biao.find(char)cipherIndex = (index + self.miyao) % len(self.biao)cipText += self.biao[cipherIndex]return cipTextdef decrypt(self,cipText):clearText = ""for char in cipText:if char in self.biao:index = self.biao.find(char)clearIndex = (index - self.miyao) % len(self.biao)clearText += self.biao[clearIndex]return clearTextclass FileEncryptWindow():def __init__(self):window = Tk()frame1 = Frame(window)frame1.pack()labelFileName = Label(frame1, text="文件名:", )labelFileName.grid(row=0, column=0)self.fileName = StringVar()entryFileName = Entry(frame1, width=100, textvariable=self.fileName)entryFileName.grid(row=0, column=1)btnOpen = Button(frame1, text="打開", command=self.openFile)btnOpen.grid(row=0, column=2)frame2 = Frame(window)frame2.pack()labelKey = Label(frame2, text="密鑰:", )labelKey.grid(row=1, column=0)self.key = StringVar()entryKey = Entry(frame2, textvariable=self.key)self.key.set("3")entryKey.grid(row=1, column=1)btnEncrypt = Button(frame2, text="加密", command=self.encryptFile)btnEncrypt.grid(row=1, column=2)btnDecrypt = Button(frame2, text="解密", command=self.decryptFile)btnDecrypt.grid(row=1, column=3)self.text = Text(window)self.text.pack()window.mainloop()def openFile(self):inFileName = askopenfilename()inFile = open(inFileName, "r")self.fileName.set(inFileName)self.fileContext = inFile.read()self.text.delete(1.0, END)self.text.insert(END, self.fileContext)inFile.close()def encryptFile(self):key = eval(self.key.get())caesar = Caesar(key)encryptStr = caesar.encrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(encryptStr)outFile.close()def decryptFile(self):key = eval(self.key.get())caesar = Caesar(key)decryptStr = caesar.decrypt(self.fileContext)outfileName = asksaveasfilename()outFile = open(outfileName, "w")outFile.write(decryptStr)outFile.close()FileEncryptWindow()

點擊"打開"按鈕,選擇要加密或解密的文件。
在密鑰輸入框中輸入密鑰值(默認為3)。
點擊"加密"或"解密"按鈕,輸出文件將被保存到用戶選擇的路徑

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43734.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43734.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43734.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

免費SSL證書申請指南

申請免費SSL證書的步驟相對直接&#xff0c;以下是基于當前可用信息的簡明指南&#xff0c;特別是針對一些熱門的免費SSL證書提供商&#xff0c;下面以JoySSL證書商為例&#xff1a; 1、注冊賬號 打開JoySSL官網&#xff0c;注冊并填寫邀請碼230920&#xff0c;獲取免費證書與…

RK系列UST-OTG切換為HOST模式或DEVICE模式的兩種方法(DTS修改和軟件命令修改)

1、修改DTS dr_mode: tells Dual-Role USB controllers that we want to work on a particular mode. Valid arguments are “host”, “peripheral” and “otg”. In case this attribute isn’t passed via DT, USB DRD controllers should default to OTG. usb20_otg: usb…

淺談三車平臺車型對比功能實用獎-競品分析

目錄&#xff1a; 一、項目背景 二、競品概述 三、競品目標功能對比 3.1、車型對比入口位置 3.2、車型對比首頁 3.3、添加/刪除車型功能 3.4、選擇車型后功能對比 3.5、配置對比的功能 四、總結 一、項目背景 在汽車購買過程中&#xff0c;消費者經常面臨著選擇困難&…

六、數據可視化—Echars(爬蟲及數據可視化)

六、數據可視化—Echars&#xff08;爬蟲及數據可視化&#xff09; Echarts應用 Echarts Echarts官網&#xff0c;很多圖表等都是我們可以 https://echarts.apache.org/zh/index.html 是百度自己做的圖表&#xff0c;后來用的人越來越多&#xff0c;捐給了orange組織&#xf…

【好生意】暢捷通好生意各版本之間的區別

【暢捷通好生意各版本區別】 隨著產品線的增加&#xff0c;不同版本之間存在差異。 以下是針對自己使用、研究過程中的記錄。 完善ing 功能普及版標準版采購運費分攤沒有單獨的采購費用分攤單&#xff0c;但是支持隨單分攤。支持

企業如何挑選策劃公司,這些標準你了解嗎?

誠然&#xff0c;在這個競爭激烈的市場環境下&#xff0c;企業有時候就像是站在十字路口的旅人&#xff0c;面前擺著的是一條條花錢卻未必能看見收益的道路。 這時候&#xff0c;找一家對的策劃公司就很重要&#xff0c;這里分享一點個人多年經驗&#xff0c;希望對你有所幫助…

【精簡教程】VSCode 連接 Remix

初始化 Node.js 項目 yarn init v1.22.19安裝 Remix yarn add remix-project/remixd -g?? 此時如果直接敲 remix&#xff0c;顯示找不到這個命令。 使用 Node.js 來直接執行 remixd.js 文件 node node_modules\remix-project\remixd\src\bin\remixd.js&#x1f604; 連接上了…

安全極客團隊榮獲首屆“矩陣杯”網絡安全大賽人工智能挑戰賽“三等獎”

近日&#xff0c;東半球規格高、規模大且獎金豐厚的網絡安全頂級賽事——首屆“矩陣杯”網絡安全大賽在青島國際會議中心圓滿落幕。本次大賽設置了五大賽事&#xff0c;包括通用產品漏挖賽、國產軟硬件安全檢測賽、原創漏洞挖掘賽、人工智能&#xff08;大模型&#xff09;挑戰…

【Linux】Windows平臺使用gdb調試FFmpeg源碼

FFmpeg是一個跨平臺的多媒體庫&#xff0c;有時需要在別的平臺上進行開發和調試&#xff0c;記錄一下在linux環境下使用gdb來調試FFmpeg源碼的基本方式 1.可執行文件 在windows平臺使用linux環境來調試FFmpeg源碼&#xff0c;需要編譯生成一個后綴有_g的exe文件&#xff0c;參…

HTTP中常見的狀態碼有哪些?

常用的包括以下幾個&#xff1a; 200&#xff1a;表示客戶端請求成功 201&#xff1a;請求成功,服務器創建了新資源。 204&#xff1a;無內容&#xff0c;服務器成功處理請求&#xff0c;但未返回任何內容。 206: 表示“部分內容”,當客戶端請求一個資源的一部分時&#xff0c;…

YOLOv10部署教程,使用tensorRT部署,有轉化和推理代碼

YOLOv10部署教程,使用tensorRT部署,有轉化和推理代碼 一、使用平臺1. 轉化onnx模型轉化trt模型模型推理全部的代碼論文題目:YOLOv10: Real-Time End-to-End Object Detection 研究單位:清華大學 論文鏈接:http://arxiv.org/abs/2405.14458 代碼鏈接:https://github.com/T…

每天一個數據分析題(四百二十三)- 置信區間

在給定的顯著性水平下&#xff0c;某一特定的X水平上&#xff0c;總體Y分布的離散度越大&#xff0c;即σ^2越大&#xff0c;則 A. 預測區間越寬&#xff0c;精度越低 B. 預測區間越寬&#xff0c;預測誤差越小 C. 預測區間越窄&#xff0c;精度越高 D. 預測區間越窄&#…

如何在idea安裝git,使用gitee?

一、什么是git&#xff0c;git與gitee、GitHub的關系&#xff1f; 1.什么是git&#xff1f; Git 是一個開源的分布式版本控制系統&#xff0c;用于企業項目中程序員協同開發。 2.git與gitee、GitHub的關系是什么&#xff1f; git &#xff1a;Git是一種版本控制系統&#x…

看完這篇,你的服務設計能力將再次進化!

引言 在當今快速演變的技術場景中&#xff0c;服務設計不僅僅是遵循通用的設計規范和最佳實踐的問題&#xff0c;它更深層次地觸及到如何在滿足這些標準的同時&#xff0c;確保服務能夠靈活適應未來的變化、滿足用戶的期望。本篇文章旨在探討在遵循通用設計規范之外&#xff0…

Three.js相機簡明教程

相機校準是 3D 計算機圖形學中的一個基本概念&#xff0c;涉及設置虛擬相機以模擬真實世界相機的視角和行為。在 Three.js&#xff08;一種流行的 3D 渲染 JavaScript 庫&#xff09;中&#xff0c;了解相機校準對于創建逼真且身臨其境的 3D 場景至關重要。在本文中&#xff0c…

UML類圖的建立過程

1. 概念層類圖 概念層的類圖描述的是現實世界中對問題領域的概念理解&#xff0c;類圖中表達的類與現實世界的問題領域中的實際事物有著明顯的對應關系&#xff0c;類之間的關系也與問題領域中實際事物之間的關系有著明顯的對應關系。在概念層類圖階段很少考慮或者幾乎不需要考…

07-7.5.1 散列表的基本概念

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜歡《數據結構》部分筆記的小伙伴可以…

指令v-el的作用是什么

在Vue.js的早期版本中&#xff08;特別是Vue 1.x版本&#xff09;&#xff0c;v-el 指令被用來給元素注冊引用信息&#xff08;即DOM元素的引用&#xff09;。這樣&#xff0c;開發者就可以在Vue實例的方法中直接訪問到這個DOM元素。然而&#xff0c;需要注意的是&#xff0c;從…

28.IP核理論知識(Xilinx)

&#xff08;1&#xff09;ip核是什么&#xff1f; IP&#xff08;Intellectual Property&#xff09;即知識產權&#xff0c;在半導體產業中&#xff0c;將IP核定義為“用于ASIC或FPGA中的預先設計好的電路功能模塊”&#xff0c;簡而言之&#xff0c;這里的IP即電路功能模塊。…

Element輪播圖組件切換太單調?手把手帶你重寫切換效果

前言&#xff1a; 最近在逛山東博物館網站的時候&#xff0c;發現該網站主頁淡入淡出的輪播圖非常的優雅&#xff0c;所以就想來復刻一下&#xff0c;也算是對組件進行了二次的封裝和修改 工具準備&#xff1a; Vue3Element Plus走馬燈組件 注意事項&#xff1a; Element …