亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

教你用python實(shí)現(xiàn)一個(gè)加密的文字處理器

 更新時(shí)間:2022年06月06日 10:25:01   作者:助力畢業(yè)  
生活中有時(shí)候我們需要對(duì)一些重要的文件進(jìn)行加密,下面這篇文章主要給大家介紹了關(guān)于如何用python實(shí)現(xiàn)一個(gè)加密文字處理器的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

這是一個(gè)類似于記事本的文字處理器。與正常的記事本不同的是,它會(huì)將文本文檔進(jìn)行加密,確保無法被常規(guī)的程序打開。

由于本人是一位業(yè)余編程愛好者,對(duì)于“python之禪”之類的規(guī)則比較不以為然,因此本程序代碼也許有些許凌亂(當(dāng)然不利于后期修改)。

這篇文章我早已發(fā)布過,但當(dāng)時(shí)只給出了代碼,并加了一些注釋?,F(xiàn)在,我希望在這里詳細(xì)解釋這個(gè)程序。我會(huì)分一個(gè)月或更久更新這篇文章,請(qǐng)讀者耐心等待。

首先,對(duì)于一個(gè)適合我們廣大中華兒女使用的程序,我們不可避免地要使用中文。這就需要對(duì)編碼進(jìn)行聲明:

# coding:utf-8

然后,就到了模塊導(dǎo)入的環(huán)節(jié)了。我們這里需要tkinter,windnd,os和sys。windnd可以用pip安裝,tkinter則需要在安裝python時(shí)勾選:

from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
import windnd
import os
import sys

接下來,我們會(huì)看到這樣一段代碼:

try:
    filename = sys.argv[1]
except:
    filename = ""

這是干什么的呢?我們知道,對(duì)于exe程序,有一個(gè)“Open with”功能,也就是可以將拖動(dòng)到exe文件或其快捷方式的文件打開。事實(shí)上,py文件也有這個(gè)功能,但是多數(shù)情況下這樣操作后只能使程序正常運(yùn)行,而不能對(duì)文件進(jìn)行任何操作。而“sys.argv[1]”的作用就是,讀取這個(gè)文件的路徑信息。這樣,我們就可以用open或sys庫里的一些指令進(jìn)行對(duì)文件的操作了。

def encryption(c, d):
    c = list(c + d)
    g=list(d)
    d=0
    for i in g:
        d*=ord(i)
        d=round(abs(d)**0.5)
    f="0x"
    for i in c:
        e=str(ord(i)+d)
        d=round(300*(d**0.5))
        f=f+e+"a"
    f=eval(f[:-1])
    return (f)
def decrypt(c,d):
    c=hex(int(c))
    print(c)
    c=c[2:].split("a")
    z=d
    g = list(d)
    d = 0
    for i in g:
        d *= ord(i)
        d = round(abs(d) ** 0.5)
    f=""
    for i in c:
        e = chr(int(i)-d)
        d = round(300 * (d ** 0.5))
        f = f + e
    if f[-len(z):]==z:
        f=f[:-len(z)]
        return (f)
    else:
        c="bbc"+12

這一段就比較勁爆了。它定義了兩個(gè)函數(shù),一個(gè)用于加密,另外一個(gè)用于解密(順便說一句,我英語不太好,有的函數(shù)或變量的名字可能比較古怪,請(qǐng)見諒)。

encryption是加密的函數(shù)(呃,這個(gè)應(yīng)該叫做encrypt,我編這個(gè)程序時(shí)大腦有些短路,但既然已經(jīng)這樣了,也就不改了),它會(huì)將明文(輸入的c)通過與密鑰d有關(guān)的某些運(yùn)算,得出一個(gè)十六進(jìn)制數(shù),然后將其轉(zhuǎn)化為十進(jìn)制。同時(shí),為了確保解密結(jié)果唯一,將密鑰一起連接在明文上,起校驗(yàn)作用。在這里,對(duì)于明文的每一個(gè)字符都會(huì)將加密過程中實(shí)際使用的密鑰進(jìn)行變動(dòng),因此基本是不可能通過字符出現(xiàn)頻率的規(guī)律來破解的。由于密鑰是字符,暴力拆解也基本不可能。

decrypt是解密,它大致就是encryption的逆操作,同時(shí)如果校驗(yàn)的結(jié)果有誤,或是遇到其他解密失敗的情況它會(huì)產(chǎn)生錯(cuò)誤(因此使用時(shí)需要try-except,來確保程序不會(huì)退出,同時(shí)對(duì)解密失敗的情況進(jìn)行處理)。

接下來是基本的文件操作部分:

def mynew(aaa=1):
? ? global top, filename, textPad
? ? top.title("無標(biāo)題 - 加密文本編輯器")
? ? filename = None
? ? textPad.delete(1.0, END)
? ? textPad.insert(1.0, "")
def myopen(aaa=1):
? ? global filename,kkk
? ? filename = askopenfilename()
? ? if filename == "":
? ? ? ? filename = None
? ? else:
? ? ? ? top.title(os.path.basename(filename)+" - 加密文本編輯器")
? ? ? ? format=os.path.basename(filename)[os.path.basename(filename).find(".")+1:]
? ? ? ? textPad.delete(1.0, END)
? ? ? ? try:
? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ccc = str(c)[2:-1]
? ? ? ? ? ? ccc.replace("\\","")
? ? ? ? ? ? textPad.insert(1.0,decrypt(ccc,format))
? ? ? ? ? ? kkk=1
? ? ? ? except:
? ? ? ? ? ? f.close()
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="gbk")
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="utf-8")
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? ? ? except:
? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk=0
? ? ? ? f.close()
def mysave(aaa=1):
? ? global filename,kkk
? ? try:
? ? ? ? msg = textPad.get(1.0, 'end')[0:-1]
? ? ? ? if kkk==0:
? ? ? ? ? ? f = open(filename, 'w', encoding="utf-8")
? ? ? ? ? ? f.write(msg)
? ? ? ? else:
? ? ? ? ? ? f = open(filename, 'wb')
? ? ? ? ? ? fffff = str(encryption(msg, format))
? ? ? ? ? ? fffff = eval("b'{}'".format(fffff))
? ? ? ? ? ? print(fffff)
? ? ? ? ? ? f.write(fffff)
? ? ? ? f.close()
? ? except:
? ? ? ? mysaveas()

def mysaveas(aaa=1):
? ? global filename
? ? f = asksaveasfilename(initialfile="無標(biāo)題.txt")
? ? filename = f
? ? format = os.path.basename(filename)[os.path.basename(filename).find(".") + 1:]
? ? msg = textPad.get(1.0, 'end')[0:-1]
? ? if not format == "py" and not format=="bat" and not format == "pyw"and not format == "cmd":
? ? ? ? fh = open(filename, 'wb')
? ? ? ? fffff = str(encryption(msg, format))
? ? ? ? fffff = eval("b'{}'".format(fffff))
? ? ? ? print(fffff)
? ? ? ? fh.write(fffff)
? ? else:
? ? ? ? fh = open(filename, 'w', encoding="utf-8")
? ? ? ? fh.write(msg)
? ? fh.close()
? ? top.title(os.path.basename(f)+" - 加密文本編輯器")
def opened(files):
? ? global filename,kkk
? ? ff = '\n'.join((item.decode('gbk') for item in files))
? ? filename = ff
? ? if filename == "":
? ? ? ? filename = None
? ? else:
? ? ? ? top.title(os.path.basename(filename) + " - 加密文本編輯器")
? ? ? ? format = os.path.basename(filename)[os.path.basename(filename).find(".") + 1:]
? ? ? ? textPad.delete(1.0, END)
? ? ? ? try:
? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ccc = str(c)[2:-1]
? ? ? ? ? ? ccc.replace("\\", "")
? ? ? ? ? ? textPad.insert(1.0, decrypt(ccc, format))
? ? ? ? ? ? kkk = 1
? ? ? ? except:
? ? ? ? ? ? f.close()
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="gbk")
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="utf-8")
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? ? ? except:
? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? f.close()
def mynew(aaa=1):
? ? global top, filename, textPad
? ? top.title("無標(biāo)題 - 加密文本編輯器")
? ? filename = None
? ? textPad.delete(1.0, END)
? ? textPad.insert(1.0, "")

首先說mynew。這里有一個(gè)可選參數(shù)a,這是因?yàn)橥ㄟ^bind激活函數(shù)會(huì)輸入一個(gè)參數(shù)(這點(diǎn)我非常反感),為了不讓程序運(yùn)行出錯(cuò),就添加了一個(gè)可選參數(shù)。這個(gè)其實(shí)沒啥好說。global后面是所需的全局變量,然后就是設(shè)置窗口名稱、文件名稱,并清空輸入框,很簡單,很明了。

def myopen(aaa=1):
? ? global filename,kkk
? ? filename = askopenfilename()
? ? if filename == "":
? ? ? ? filename = None
? ? else:
? ? ? ? top.title(os.path.basename(filename)+" - 加密文本編輯器")
? ? ? ? format=os.path.basename(filename)[os.path.basename(filename).find(".")+1:]
? ? ? ? textPad.delete(1.0, END)
? ? ? ? try:
? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ccc = str(c)[2:-1]
? ? ? ? ? ? ccc.replace("\\","")
? ? ? ? ? ? textPad.insert(1.0,decrypt(ccc,format))
? ? ? ? ? ? kkk=1
? ? ? ? except:
? ? ? ? ? ? f.close()
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="gbk")
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="utf-8")
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? ? ? except:
? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk=0
? ? ? ? f.close()

然后就是myopen。“filename=askopenfilename()”就是,彈出一個(gè)選擇打開的文件的窗口,并將結(jié)果存入filename。然后我們獲取文件的后綴信息,作為解密所需的密鑰。接下來,我們先嘗試解密文件。如果執(zhí)行中有錯(cuò)誤,也就是無法解密,則用gbk編碼正常打開,仍然打開失敗,則使用utf-8。當(dāng)然,如果都失敗了,就用rb模式,也就是字節(jié)流的形式打開。

啊,越講越上頭,超過了我預(yù)期的篇幅……好了,現(xiàn)在先講到這里,等待下一次更新吧(本人初二,因此接觸電腦機(jī)會(huì)不多,更新嘛,自然是比較慢的。耐心等待!耐心等待!?。。?!

完整的代碼:

# coding:utf-8

from tkinter import *
from tkinter.filedialog import *
from tkinter.messagebox import *
import windnd
import os
import sys

kkk=1
try:
? ? filename = sys.argv[1]
except:
? ? filename = ""


def encryption(c, d):
? ? c = list(c + d)
? ? g=list(d)
? ? d=0
? ? for i in g:
? ? ? ? d*=ord(i)
? ? ? ? d=round(abs(d)**0.5)
? ? f="0x"
? ? for i in c:
? ? ? ? e=str(ord(i)+d)
? ? ? ? d=round(300*(d**0.5))
? ? ? ? f=f+e+"a"
? ? f=eval(f[:-1])
? ? return (f)
def decrypt(c,d):
? ? c=hex(int(c))
? ? print(c)
? ? c=c[2:].split("a")
? ? z=d
? ? g = list(d)
? ? d = 0
? ? for i in g:
? ? ? ? d *= ord(i)
? ? ? ? d = round(abs(d) ** 0.5)
? ? f=""
? ? for i in c:
? ? ? ? e = chr(int(i)-d)
? ? ? ? d = round(300 * (d ** 0.5))
? ? ? ? f = f + e
? ? if f[-len(z):]==z:
? ? ? ? f=f[:-len(z)]
? ? ? ? return (f)
? ? else:
? ? ? ? c="bbc"+12
def mynew(aaa=1):
? ? global top, filename, textPad
? ? top.title("無標(biāo)題 - 加密文本編輯器")
? ? filename = None
? ? textPad.delete(1.0, END)
? ? textPad.insert(1.0, "")
def myopen(aaa=1):
? ? global filename,kkk
? ? filename = askopenfilename()
? ? if filename == "":
? ? ? ? filename = None
? ? else:
? ? ? ? top.title(os.path.basename(filename)+" - 加密文本編輯器")
? ? ? ? format=os.path.basename(filename)[os.path.basename(filename).find(".")+1:]
? ? ? ? textPad.delete(1.0, END)
? ? ? ? try:
? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ccc = str(c)[2:-1]
? ? ? ? ? ? ccc.replace("\\","")
? ? ? ? ? ? textPad.insert(1.0,decrypt(ccc,format))
? ? ? ? ? ? kkk=1
? ? ? ? except:
? ? ? ? ? ? f.close()
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="gbk")
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="utf-8")
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? ? ? except:
? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk=0
? ? ? ? f.close()
def mysave(aaa=1):
? ? global filename,kkk
? ? try:
? ? ? ? msg = textPad.get(1.0, 'end')[0:-1]
? ? ? ? if kkk==0:
? ? ? ? ? ? f = open(filename, 'w', encoding="utf-8")
? ? ? ? ? ? f.write(msg)
? ? ? ? else:
? ? ? ? ? ? f = open(filename, 'wb')
? ? ? ? ? ? fffff = str(encryption(msg, format))
? ? ? ? ? ? fffff = eval("b'{}'".format(fffff))
? ? ? ? ? ? print(fffff)
? ? ? ? ? ? f.write(fffff)
? ? ? ? f.close()
? ? except:
? ? ? ? mysaveas()

def mysaveas(aaa=1):
? ? global filename
? ? f = asksaveasfilename(initialfile="無標(biāo)題.txt")
? ? filename = f
? ? format = os.path.basename(filename)[os.path.basename(filename).find(".") + 1:]
? ? msg = textPad.get(1.0, 'end')[0:-1]
? ? if not format == "py" and not format=="bat" and not format == "pyw"and not format == "cmd":
? ? ? ? fh = open(filename, 'wb')
? ? ? ? fffff = str(encryption(msg, format))
? ? ? ? fffff = eval("b'{}'".format(fffff))
? ? ? ? print(fffff)
? ? ? ? fh.write(fffff)
? ? else:
? ? ? ? fh = open(filename, 'w', encoding="utf-8")
? ? ? ? fh.write(msg)
? ? fh.close()
? ? top.title(os.path.basename(f)+" - 加密文本編輯器")
def opened(files):
? ? global filename,kkk
? ? ff = '\n'.join((item.decode('gbk') for item in files))
? ? filename = ff
? ? if filename == "":
? ? ? ? filename = None
? ? else:
? ? ? ? top.title(os.path.basename(filename) + " - 加密文本編輯器")
? ? ? ? format = os.path.basename(filename)[os.path.basename(filename).find(".") + 1:]
? ? ? ? textPad.delete(1.0, END)
? ? ? ? try:
? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ccc = str(c)[2:-1]
? ? ? ? ? ? ccc.replace("\\", "")
? ? ? ? ? ? textPad.insert(1.0, decrypt(ccc, format))
? ? ? ? ? ? kkk = 1
? ? ? ? except:
? ? ? ? ? ? f.close()
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="gbk")
? ? ? ? ? ? ? ? try:
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? except:
? ? ? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="utf-8")
? ? ? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? ? ? except:
? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? ? ? kkk = 0
? ? ? ? f.close()

top = Tk()
top.title("無標(biāo)題 - 加密文本編輯器")
top.geometry("1000x600+100+50")
menubar = Menu(top)
menubar.add_command(label="新建", command=mynew)
menubar.add_command(label="打開", command=myopen)
menubar.add_command(label="保存", ?command=mysave)
menubar.add_command(label="另存為", command=mysaveas)
menu = Menu(top, tearoff=False)
menu.add_command(label="新建", accelerator="Ctrl+N", command=mynew)
menu.add_command(label="打開", accelerator="Ctrl+O", command=myopen)
menu.add_command(label="保存", accelerator="Ctrl+S", ?command=mysave)
menu.add_command(label="另存為", accelerator="Ctrl+Shift+S", command=mysaveas)
def command(event):
? ? menu.post(event.x_root, event.y_root)
top['menu'] = menubar
all=Frame(top)
all.pack(expand=YES, fill=BOTH)
textPad = Text(all,font=('宋體', 14), undo=True)
if filename == "":
? ? filename = None
? ? textPad.insert(1.0, "")
else:
? ? top.title(os.path.basename(filename) + " - 加密文本編輯器")
? ? format = os.path.basename(filename)[os.path.basename(filename).find(".") + 1:]
? ? textPad.delete(1.0, END)
? ? try:
? ? ? ? f = open(filename, 'rb')
? ? ? ? c = f.read()
? ? ? ? ccc = str(c)[2:-1]
? ? ? ? ccc.replace("\\", "")
? ? ? ? textPad.insert(1.0, decrypt(ccc, format))
? ? ? ? kkk = 1
? ? except:
? ? ? ? f.close()
? ? ? ? try:
? ? ? ? ? ? f = open(filename, 'r', encoding="gbk")
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? except:
? ? ? ? ? ? ? ? f.close()
? ? ? ? ? ? ? ? f = open(filename, 'r', encoding="utf-8")
? ? ? ? ? ? ? ? c = f.read()
? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? kkk = 0
? ? ? ? except:
? ? ? ? ? ? f.close()
? ? ? ? ? ? f = open(filename, 'rb')
? ? ? ? ? ? c = f.read()
? ? ? ? ? ? textPad.insert(1.0, c)
? ? ? ? ? ? kkk = 0
? ? f.close()
scroll = Scrollbar(all)
textPad.config(yscrollcommand=scroll.set)
scroll.config(command=textPad.yview)
scroll.pack(side=RIGHT, fill=Y)
textPad.pack(expand=YES,side=RIGHT,fill=BOTH)
top.bind("<Control-N>", mynew)
top.bind("<Control-n>", mynew)
top.bind("<Control-O>", myopen)
top.bind("<Control-o>", myopen)
top.bind("<Control-S>", mysave)
top.bind("<Control-s>", mysave)
top.bind("<Control-Shift-S>", mysaveas)
top.bind("<Control-Shift-s>", mysaveas)
top.bind("<Button-3>", command)
windnd.hook_dropfiles(top,func=opened)
top.mainloop()

總結(jié)

到此這篇關(guān)于用python實(shí)現(xiàn)一個(gè)加密文字處理器的文章就介紹到這了,更多相關(guān)python加密文字處理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論