因为发现基础教程我之前推荐的那个网站就已经很完善了,就不重复写了,所以本汪来一起做练习吧。

一、加密原理

记得当时我学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个变量的值交换了。比如 

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

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

二、程序效果演示

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

2.运行写好的python脚本

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

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

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

 #作者:smallfoxdog 小狐狸狗狗
#时间:2018年3月20日13:57:04
#功能:文件的加密和解密 import os #主函数
def main():
getInput() #输入参数
def getInput(): #获取操作的参数
while(True): oper = input("请输入操作(e:加密 d:解密):") if(oper=="e" or oper=="d"):
break
else:
print("输入有误,请重新输入!") #获取文件密码
while(True): password= input("请输入密码:") if(len(password)==0):
print("密码不能为空!")
else:
break #获取操作的文件路径
while(True): path=input("请输入文件路径:") try:
f_read = open(path,"rb")
except:
print("文件没有找到,请检查路径是否存在!")
else:
break #进行加密或解密操作
if(oper=="e"):
encrypt(path,password)
elif(oper=="d"):
decrypt(path, password) #加密
def encrypt(path,password): #因为刚学可能有库可以直接获取这些信息吧,不过自己写个算法获取这些信息也没什么难度
fileFullName = path.split(os.path.sep)#os.path.sep为操作系统的文件分隔符
fileName = fileFullName[len(fileFullName)-1].split(".")[0]
fileSuffix = fileFullName[len(fileFullName)-1].split(".")[1] # print("文件全名称:",fileFullName[len(fileFullName)-1])
# print("文件名称:",fileName)
# print("文件后缀:",fileSuffix) fileParent = path[0:len(path)-len(fileFullName[len(fileFullName)-1])]
newFileName="加密_"+fileFullName[len(fileFullName)-1]
newFilePath=fileParent+newFileName # print("文件父路径:",fileParent)
# print("新的文件名称:",newFileName)
# print("新的文件全路径:", newFilePath) f_read = open(path,"rb")
f_write = open(newFilePath,"wb") count=0 #当前密码加密索引 #我们采用异或循环加密
for now in f_read:
for nowByte in now:
newByte=nowByte^ord(password[count%len(password)])
count+=1
f_write.write(bytes([newByte])) f_read.close()
f_write.close() print("汪~文件加密完毕^_^") #解密(因为我们采取的异或解密,所以其实和加密算法一样)
def decrypt(path, password):
# 因为刚学可能有库可以直接获取这些信息吧,不过自己写个算法获取这些信息也没什么难度
fileFullName = path.split(os.path.sep) # os.path.sep为操作系统的文件分隔符
fileName = fileFullName[len(fileFullName) - 1].split(".")[0]
fileSuffix = fileFullName[len(fileFullName) - 1].split(".")[1] # print("文件全名称:", fileFullName[len(fileFullName)-1])
# print("文件名称:", fileName)
# print("文件后缀:", fileSuffix) fileParent = path[0:len(path) - len(fileFullName[len(fileFullName)-1])]
newFileName = "解密_" + fileFullName[len(fileFullName) - 1]
newFilePath = fileParent + newFileName # print("文件父路径:", fileParent)
# print("新的文件名称:", newFileName)
# print("新的文件全路径:", newFilePath) f_read = open(path, "rb")
f_write = open(newFilePath, "wb") count = 0 # 当前密码加密索引 # 我们采用异或循环加密
for now in f_read:
for nowByte in now:
newByte = nowByte ^ ord(password[count % len(password)])
count += 1
f_write.write(bytes([newByte])) f_read.close()
f_write.close() print("汪~文件解密完毕^_^") main()

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

Python基础教程3——教你用Python做个简单的加密程序(还基础什么呀,直接来练习吧,带源码)的更多相关文章

  1. (Python基础教程之十二)Python读写CSV文件

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  2. 10个带源码的充满活力的Web设计教程

    10个带源码的充满活力的Web设计教程 2013-08-02 16:47 佚名 OSCHINA编译 我要评论(0) 字号:T | T Web设计师必须了解各种各样的Web设计风格,这才能让他或者她在设 ...

  3. 【python】10分钟教你用python打造贪吃蛇超详细教程

    10分钟教你用python打造贪吃蛇超详细教程 在家闲着没妹子约, 刚好最近又学了一下python,听说pygame挺好玩的.今天就在家研究一下, 弄了个贪吃蛇出来.希望大家喜欢. 先看程序效果: 0 ...

  4. [Python]基础教程(4)、Python 变量类型

    Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据 ...

  5. 【python】10分钟教你用python如何正确把妹

    前言 今天没妹子约,刚好研究一下.如何用神奇的python打造一个把妹神器吧.看完这个,你们就能走向人生巅峰,迎娶白富美啦. 我知道你们想看看效果 image 当然啦,这只是测试版的效果,真正的版本可 ...

  6. 【python】10分钟教你用python下载和拼接微信好友头像图片

    前言 相信微信大家是用得再多也不过了.那么,对于python+微信,又能玩出什么新的花样呢?下面小编就给大家带来一个好玩的东西.用python下载所有的微信好友的头像,然后拼接成一张大图.这样,大家就 ...

  7. 2018-06-20 中文代码示例视频演示Python入门教程第三章 简介Python

    知乎原链 Python 3.6.5官方入门教程中示例代码汉化后演示 对应在线文档: 3. An Informal Introduction to Python 不知如何合集, 请指教. 中文代码示例P ...

  8. 【python】10分钟教你用python一行代码搞点大新闻

    准备 相信各位对python的语言简洁已经深有领会了.那么,今天就带大家一探究竟.看看一行python代码究竟能干些什么大新闻.赶紧抄起手中的家伙,跟我来试试吧. 首先你得先在命令行进入python. ...

  9. Python 简明教程 --- 2,第一个Python 程序

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 如果你发现特殊情况太多,那你肯定是用错方法了. -- Carig Zerouni 当你在自己的电脑上 ...

随机推荐

  1. Egret学习笔记 (Egret打飞机-1.大致思路)

    大致看了一遍Egret的官方文档,就开始打算使用Egret来开发一个打飞机游戏. 首先来捋一捋思路,先来看一看一个打飞机游戏的图片 基本上一个打飞机游戏分为 开始游戏   ----------进入游戏 ...

  2. dubbox系列【二】——dubbox admin环境搭建

    1.环境 JDK7+ zookeeper 3.3.6 tomcat 7+ 2.搭建步骤 (1)安装zookeeper 单机模式:参考这里. 伪集群模式:参考这里. ①单机或伪集群模式均可. ②笔者使用 ...

  3. 3.数码相框-通过freetype库实现矢量显示

    本章主要内容如下: 1)矢量字体原理 2)使用freetype库实现矢量字体显示 1. 矢量字体原理 将汉字的笔划边缘用直线段描述成封闭的曲线,并将线段各端点的坐标经压缩存储,如下图所示: 由于每个汉 ...

  4. UVA-12166 天平性质+字符处理

    这题思维难度很大,关键是总结这个性质. 1.天平性质:某个秤砣重量为w,高度为h,如果要让这个天平平衡并且以这个秤砣为基准,那么整个天平的总重量为w*(2^h) 2.利用这个性质:题目要求秤砣数量改变 ...

  5. 下载visual studio 的离线包

    我们知道,visual studio是微软发布的软件开发的集成平台,十分好用,可以说是目前最好用的软件编辑工具. 最新版的是visual studio 2017,但是在微软的官网上只支持下载在线安装器 ...

  6. C#的发展历程第五 - C# 7开始进入快速迭代道路

    C# 7开始,C#加快了迭代速度,多方面的打磨让C#在易用性,效率等各方面都向完美靠近.另外得益于开源,社区对C#的进步也做了很大共享.下面带领大家看看C# 7的新特性.其中一部分是博主已经使用过,没 ...

  7. linux 分布式文件系统

    分布式文件系统(DFS) 指文件系统管理的物理存储资源不一定直接连接在本地节点上 而是通过计算机网络与节点相连 分布式文件系统的设计基于客户机/服务器模式 一个典型的网络可能包括多个多个用户访问的服务 ...

  8. linux 运维,代理,acl控制访问

    运维概述:运行 & 维护,Operation & MaintanceIT运维.业务运维.日常管理运维采用相关的方法.手段.技术.制度.流程和文档等,对IT运行环境.IT业务系统和IT运 ...

  9. Eclipse部署Java Web项目到Tomcat出错

    1.今天,我打开Eclipse,准备将一个Java Web项目部署到Tomcat中, 结果弹出提示错误窗口,具体如下: (1)出错详情 Could not publish server configu ...

  10. HighCharts之气泡图

    HighCharts之气泡图 1.HighCharts之气泡图源码 bubble.html: <!DOCTYPE html> <html> <head> <m ...