python制作简单app_教你用Python做个简单的加密软件

教你用Python做个简单的加密软件

一、加密原理

记得当时我学c++的时候,学到输入输出流的时候,当时王老师就教我们写了一个小的加密程序,所以这次既然学习了Python这个小练习当然不能放过(其实这个加密程序我用c++,java都写过可以说也算比较熟了)。加密原理就是循环读取文件每个字节,然后进行相应的加密运算后就是加密操作了,解密时候进行逆运算就是解密操作了。

比如我们读取文件的第一个字节数据是20(读取出来的每位数据为0~255,因为8位是1字节,所以二进制的00000000~11111111表示的无符号数字范围就是0~255了),加密我们可以选择在这个基础上加1,那么加密后的第1个字节就是21了,如果我们将所有字节加1,那么相当于文件进行了加密(需要注意的是如果是255的话加1会越界,所以边界值需要特殊处理,如256的话我们则直接写入0)。解密时候我们每个字节都减1即可(当然边界值需要自己处理,比如之前加密后的0,我们直接写入255)。当然这样解密是不是很容易就会破解那,所以我们可以定义一个字符串来进行加密,比如“123456”,我们第1个字节与1进行加密,第2个字节与2进行加密,到了第7个我们再与1加密进行,直到所有字节都循环与这个字符串加密完,这样是不是加大了破解的难度那?

当然我用的是异或加密算法,异或一个最神奇的地方莫过于不借助任何变量将2个变量的值交换了。比如

copycode.gif

a=10b=20a^=b

b^=a

a^=bprint(a)print(b)#输出#20#10

copycode.gif

是不是很神奇呢,所以加密使用异或也可以很方便的进行加密和还原

二、程序效果演示

1.创建一个txt文件(当然图片,声音,所有格式文件都可以),这里方便演示我选择一个txt文件

1259164-20180320152443310-60502407.png

2.运行写好的python脚本

1259164-20180320152658947-1349446988.png

加密后的文件是不是什么都看不出来了

1259164-20180320152731239-239323014.png

3.进行解密(我们输入一次错误的密码,当然密码近似度越高,还原的内容就会越多,当然如果是图片或者声音那么你错一个都是无法播放的)

1259164-20180320152921578-838364061.png

三、本汪写的加密源码(如有不足请指正)

copycode.gif

1 #作者:smallfoxdog 小狐狸狗狗

2 #时间:2018年3月20日13:57:04

3 #功能:文件的加密和解密

4

5 importos6

7 #主函数

8 defmain():9 getInput()10

11 #输入参数

12 defgetInput():13

14 #获取操作的参数

15 while(True):16

17 oper = input("请输入操作(e:加密 d:解密):")18

19 if(oper=="e" or oper=="d"):20 break

21 else:22 print("输入有误,请重新输入!")23

24 #获取文件密码

25 while(True):26

27 password= input("请输入密码:")28

29 if(len(password)==0):30 print("密码不能为空!")31 else:32 break

33

34 #获取操作的文件路径

35 while(True):36

37 path=input("请输入文件路径:")38

39 try:40 f_read = open(path,"rb")41 except:42 print("文件没有找到,请检查路径是否存在!")43 else:44 break

45

46 #进行加密或解密操作

47 if(oper=="e"):48 encrypt(path,password)49 elif(oper=="d"):50 decrypt(path, password)51

52 #加密

53 defencrypt(path,password):54

55 #因为刚学可能有库可以直接获取这些信息吧,不过自己写个算法获取这些信息也没什么难度

56 fileFullName = path.split(os.path.sep)#os.path.sep为操作系统的文件分隔符

57 fileName = fileFullName[len(fileFullName)-1].split(".")[0]58 fileSuffix = fileFullName[len(fileFullName)-1].split(".")[1]59

60 #print("文件全名称:",fileFullName[len(fileFullName)-1])

61 #print("文件名称:",fileName)

62 #print("文件后缀:",fileSuffix)

63

64 fileParent = path[0:len(path)-len(fileFullName[len(fileFullName)-1])]65 newFileName="加密_"+fileFullName[len(fileFullName)-1]66 newFilePath=fileParent+newFileName67

68 #print("文件父路径:",fileParent)

69 #print("新的文件名称:",newFileName)

70 #print("新的文件全路径:", newFilePath)

71

72 f_read = open(path,"rb")73 f_write = open(newFilePath,"wb")74

75 count=0 #当前密码加密索引

76

77 #我们采用异或循环加密

78 for now inf_read:79 for nowByte innow:80 newByte=nowByte^ord(password[count%len(password)])81 count+=1

82 f_write.write(bytes([newByte]))83

84 f_read.close()85 f_write.close()86

87 print("汪~文件加密完毕^_^")88

89 #解密(因为我们采取的异或解密,所以其实和加密算法一样)

90 defdecrypt(path, password):91 #因为刚学可能有库可以直接获取这些信息吧,不过自己写个算法获取这些信息也没什么难度

92 fileFullName = path.split(os.path.sep) #os.path.sep为操作系统的文件分隔符

93 fileName = fileFullName[len(fileFullName) - 1].split(".")[0]94 fileSuffix = fileFullName[len(fileFullName) - 1].split(".")[1]95

96 #print("文件全名称:", fileFullName[len(fileFullName)-1])

97 #print("文件名称:", fileName)

98 #print("文件后缀:", fileSuffix)

99

100 fileParent = path[0:len(path) - len(fileFullName[len(fileFullName)-1])]101 newFileName = "解密_" + fileFullName[len(fileFullName) - 1]102 newFilePath = fileParent +newFileName103

104 #print("文件父路径:", fileParent)

105 #print("新的文件名称:", newFileName)

106 #print("新的文件全路径:", newFilePath)

107

108 f_read = open(path, "rb")109 f_write = open(newFilePath, "wb")110

111 count = 0 #当前密码加密索引

112

113 #我们采用异或循环加密

114 for now inf_read:115 for nowByte innow:116 newByte = nowByte ^ ord(password[count %len(password)])117 count += 1

118 f_write.write(bytes([newByte]))119

120 f_read.close()121 f_write.close()122

123 print("汪~文件解密完毕^_^")124

125 main()

copycode.gif

大家也来写一个属于自己的加密小程序吧^_^。加密和解密可以优化在一个方法里面,之前一开始想的采用一开始的加法进行加密,减法进行解密,最后还是采用了异或加密所以加密和解密就一样了,大家可以优化一下代码哦。也可以使用其他方式试试哦,欢迎一起交流^_^。

如果是企业商用,建议还是使用专业的文件加密软件,更安全稳定!

【文件加密软件编辑推荐】

易控网盾加密软件--重要文件防泄密专家!防拷贝复制、防文件传传泄露!轻松实现单位内部文件自动加密保护,加密后的文件在单位内部正常流转使用。未经许可,任何私自拷贝加密文件外发出去,都将打开为乱码,无法使用!对于发送给客户等第三方的文件,可实现控制打开时间和打开次数等防泄密参数!同时可设置对员工电脑文件自动备份,防止恶意删除造成核心数据的遗失!从源头防止企业核心文件被外泄!

相关页面:

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:kefu@ekongsoft.com,我们将及时予以处理。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以给您提供一个简单加密解密项目,使用Python编写并使用Tkinter库进行可视化。这个项目使用了最常见的凯撒密码来加密和解密文本。以下是代码: ```python import tkinter as tk class CaesarCipher: def __init__(self, shift): self.shift = shift % 26 def encrypt(self, plaintext): ciphertext = "" for char in plaintext: if char.isalpha(): shifted = chr((ord(char.upper()) + self.shift - 65) % 26 + 65) ciphertext += shifted else: ciphertext += char return ciphertext def decrypt(self, ciphertext): plaintext = "" for char in ciphertext: if char.isalpha(): shifted = chr((ord(char.upper()) - self.shift - 65) % 26 + 65) plaintext += shifted else: plaintext += char return plaintext class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.master = master self.master.title("凯撒密码加密解密器") self.create_widgets() def create_widgets(self): self.label1 = tk.Label(self.master, text="输入要加密/解密的文本:") self.label1.grid(row=0, column=0) self.text1 = tk.Text(self.master, height=5, width=50) self.text1.grid(row=1, column=0, padx=10) self.label2 = tk.Label(self.master, text="输入移位数(0-25):") self.label2.grid(row=2, column=0, pady=10) self.shift_entry = tk.Entry(self.master, width=5) self.shift_entry.grid(row=3, column=0) self.encrypt_button = tk.Button(self.master, text="加密", command=self.encrypt_text) self.encrypt_button.grid(row=4, column=0, pady=10) self.decrypt_button = tk.Button(self.master, text="解密", command=self.decrypt_text) self.decrypt_button.grid(row=5, column=0, pady=10) self.result_label = tk.Label(self.master, text="") self.result_label.grid(row=6, column=0) def encrypt_text(self): plaintext = self.text1.get("1.0", "end-1c") shift = int(self.shift_entry.get()) cipher = CaesarCipher(shift) ciphertext = cipher.encrypt(plaintext) self.result_label.configure(text=ciphertext) def decrypt_text(self): ciphertext = self.text1.get("1.0", "end-1c") shift = int(self.shift_entry.get()) cipher = CaesarCipher(shift) plaintext = cipher.decrypt(ciphertext) self.result_label.configure(text=plaintext) root = tk.Tk() app = Application(master=root) app.mainloop() ``` 这个项目使用了Tkinter库来创建一个GUI界面,带有一个文本框和两个按钮:“加密”和“解密”。用户输入要加密或解密的文本和移位数,然后按下相应的按钮即可得到结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值