字符加密python,python文本加密解密
生活中有时候需要对一些重要的文件进行加密。下面这篇文章主要介绍如何用python实现一个加密的文字处理器的相关信息。通过示例代码非常详细的介绍,有需要的朋友可以参考一下。
这是一个类似记事本的文字处理器。与普通记事本不同的是,它对文本文档进行加密,以确保它不能被常规程序打开。
由于我是一个业余程序员,不太认同“python的禅”之类的规则,所以这个程序的代码可能会有点乱(当然不利于后期修改)。
这篇文章我已经发表过了,但当时只给出了代码,补充了一些评论。现在,我想在这里详细解释这个程序。我会在一个月或更久后更新这篇文章,请耐心等待。
首先,对于一个适合我们中国人的节目,我们使用中文是必然的。这需要声明代码:
#编码:utf-8
然后,就该导入模块了。这里需要tkinter,windnd,os和sys。Windnd可以用pip安装,而tkinter需要在安装python时检查:
来自tkinter import *
从tkinter.filedialog对话框导入*
从tkinter.messagebox导入*
导入windnd
导入操作系统
导入系统
接下来,我们会看到这样一段代码:
尝试:
filename=sys.argv[1]
例外:
文件名=
这是干什么用的?我们知道,对于exe程序,有一个“打开方式”的功能,就是可以打开拖到exe文件或者其快捷方式的文件。其实py文件也有这个功能,但是大多数情况下,这个操作只能让程序正常运行,而不能对文件做什么。“sys.argv[1]”的作用是读取这个文件的路径信息。这样,我们就可以使用open或sys库中的一些指令对文件进行操作。
def加密(c,d):
c=列表(c d)
g=列表(d)
d=0
对于g:中的I
d *=阶数(I)
d=四舍五入(绝对值(d)**0.5)
f=“0x”
对于c:中的I
e=str(order(I)d)
d=四舍五入(300*(d**0.5))
f=f e a
f=eval(f[:-1])
返回(f)
定义解密(c,d):
c=十六进制(int(c))
打印(c)
c=c[2:]。拆分(“a”)
z=d
g=列表(d)
d=0
对于g:中的I
d *=阶数(I)
d=四舍五入(绝对值(d) ** 0.5)
f=
对于c:中的I
e=chr(int(i)-d)
d=四舍五入(300 * (d ** 0.5))
f=f e
if f[-len(z):]==z:
f=f[:-len(z)]
返回(f)
else:
英国广播公司12台
这一段比较精彩。它定义了两个函数,一个用于加密,一个用于解密(顺便说一句,我的英语不是很好,有些函数或变量的名字可能会很怪异,请见谅)。
加密是Encryption的一个功能(呃这个应该叫encrypt。我编这个程序的时候脑子短路了,不过既然这样,我就不改了)。它会将明文(输入的C)通过一些与密钥D相关的运算,得到一个十六进制数,然后转换成十进制。同时,为了保证解密结果的唯一性,密钥与明文连接在一起,起到校验的作用。在这里,对于明文中的每一个字符,加密过程中实际使用的密钥都会发生变化,所以用字符频率的规律来破解基本上是不可能的。因为钥匙是个人物,暴力拆解基本不可能。
解密就是解密,大致是加密的逆操作。同时,如果验证的结果是错误的,或者遇到其他解密失败,就会产生错误(所以使用时需要使用try-except,保证程序不会退出,同时处理解密失败)。
接下来是基本的文件操作部分:
def mynew(aaa=1):
全局顶部,文件名,文本面板
top.title(
无标题 - 加密文本编辑器")
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="无标题.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("无标题 - 加密文本编辑器")
filename = None
textPad.delete(1.0, END)
textPad.insert(1.0, "")
首先说mynew。这里有一个可选参数a,这是因为通过bind激活函数会输入一个参数(这点我非常反感),为了不让程序运行出错,就添加了一个可选参数。这个其实没啥好说。global后面是所需的全局变量,然后就是设置窗口名称、文件名称,并清空输入框,很简单,很明了。
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()就是,弹出一个选择打开的文件的窗口,并将结果存入filename。然后我们获取文件的后缀信息,作为解密所需的密钥。接下来,我们先尝试解密文件。如果执行中有错误,也就是无法解密,则用gbk编码正常打开,仍然打开失败,则使用utf-8。当然,如果都失败了,就用rb模式,也就是字节流的形式打开。
啊,越讲越上头,超过了我预期的篇幅……好了,现在先讲到这里,等待下一次更新吧(本人初二,因此接触电脑机会不多,更新嘛,自然是比较慢的。耐心等待!耐心等待!!!)!
完整的代码:
# coding:utf-8from 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("无标题 - 加密文本编辑器")
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="无标题.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("无标题 - 加密文本编辑器")
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()
总结
到此这篇关于用python实现一个加密文字处理器的文章就介绍到这了,更多相关python加密文字处理器内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。