Python教程自己实现软件加密功能
目录
- 原理
- 加密操作:
- 解密操作:
- 生成随机密钥:
- 加密单元:
- 解密单元:
- 加密文本文件
- 解密文件
基础知识
在 Python 中异或操作符为:^,也可以记作 XOR。按位异或的意思是:相同值异或为 0,不同值异或为 1。具体来讲,有四种可能:0 ^ 0 = 0,0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0。我们还可总结出规律(A 为 0 或 1):0 和 A 异或为 A本身;1 和 A 异或为 A 反。
让我们想看看一位二进制数满足的性质:
一位二进制数与自身的异或值为 0
b ^ b = 0
异或操作满足交换律
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
0 与 a 的异或为 a
(a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a
易知,对任意长二进制数都满足上述性质。
原理
通过了解异或操作的性质,加密原理就非常清晰了。
加密操作:
首先将文件转换成二进制数,再生成与该二进制数等长的随机密钥,将二进制数与密钥进行异或操作,得到加密后的二进制数。
解密操作:
将加密后的二进制程序与密钥进行异或操作,就得到原二进制数,最后将原二进制数恢复成文本文件
生成随机密钥:
secrets 库是 Python 3.6 引入的伪随机数模块,适合生成随机密钥。token_bytes 函数接受一个 int 参数,用于指定随机字节串的长度。int.from_bytes 把字节串转换为 int,也就是我们需要的二进制数。
加密单元:
encrypt 函数接受一个 str 对象,返回元组 (int, int)。通过 encode 方法,我们将字符串编码成字节串。int.from_bytes 函数将字节串转换为 int 对象。最后对二进制对象和随机密钥进行异或操作,就得到了加密文本。
解密单元:
decrypt 接受两个 int 对象,分别为加密文本和随机密钥。首先对两者进行异或操作,计算解密出来的 int 对象所占比特数。decrypted.bit_length 函数得到的是二进制数的位数,除以 8 可以得到所占比特大小。为了防止,1 ~ 7 位的二进制数整除 8 得到 0,所以要加上 7,然后再进行整除 8 的操作。使用 int.to_bytes 函数将解密之后的 int 的对象转换成 bytes 对象。最后通过 decode 方法,将字节串转换成字符串。
利用上述函数,我们可以很轻松对文本文件进行加密、解密操作。
加密文本文件
path 为待加密文件的地址,如果不指定密钥地址,则在该目录下新建目录和文件。
解密文件
执行完加密、解密文件操作,得到的解密文件与原文件相同
以上就是 Python 加密文件的全部内容,还请大家多多转发支持,希望大家以后多多支持我们!
相关推荐
-
如何基于python实现脚本加密
这篇文章主要介绍了如何基于python实现脚本加密,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 from pathlib import Path import python_minifier import compileall import sys def get_save_path(from_dir, to_dir, p): ori_dir = str(from_dir.resolve()) _p = str(p.resolve()) re
-
python实现加密的方式总结
加密算法分类 对称加密算法: 对称加密采用了对称密码编码技术,它的特点是文件加密和解密使用相同的密钥 发送方和接收方需要持有同一把密钥,发送消息和接收消息均使用该密钥. 相对于非对称加密,对称加密具有更高的加解密速度,但双方都需要事先知道密钥,密钥在传输过程中可能会被窃取,因此安全性没有非对称加密高. 常见的对称加密算法:DES,AES,3DES等等 非对称加密算法: 文件加密需要公开密钥(publickey)和私有密钥(privatekey). 接收方在发送消息前需要事先生成公钥和私钥,然后将
-
python实现可逆简单的加密算法
最近想把word密码文件的服务器密码信息归档到mysql数据库,心想着如果直接在里面写明文密码会不会不安全,如果用sha这些不可逆的算法又没法还原回来,所以自己就想着用Python写一个小代码,先把明文密码加密之后再存mysql表中.下面贴出我的Python代码: 首先是加密encript.py # coding:utf-8 def encrpt(s): length = len(s) j = "" for i in s: if ord(i) <= 49: i = chr(ord
-
Python实现最常见加密方式详解
前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错. 将字符串和Bytes互相转换可以使用encode()和decode()方法.如下所示: # 方法中不传参数则是以默认的utf-8编码进行转换In [1]: '南北'.encode()Out[1]: b'\xe5\x8d\x97\xe5\x8c\x97'In [2]: b'\xe5\x8d\x97\xe
-
Python教程自己实现软件加密功能
目录 原理 加密操作: 解密操作: 生成随机密钥: 加密单元: 解密单元: 加密文本文件 解密文件 基础知识 在 Python 中异或操作符为:^,也可以记作 XOR.按位异或的意思是:相同值异或为 0,不同值异或为 1.具体来讲,有四种可能:0 ^ 0 = 0,0 ^ 1 = 1, 1 ^ 0 = 1, 1 ^ 1 = 0.我们还可总结出规律(A 为 0 或 1):0 和 A 异或为 A本身:1 和 A 异或为 A 反. 让我们想看看一位二进制数满足的性质: 一位二进制数与自身的异或值为 0
-
Python使用PyCrypto实现AES加密功能示例
本文实例讲述了Python使用PyCrypto实现AES加密功能.分享给大家供大家参考,具体如下: #!/usr/bin/env python from Crypto.Cipher import AES import base64 import os # the block size for the cipher object; must be 16, 24, or 32 for AES BLOCK_SIZE = 32 # the character used for padding--with
-
Python下实现的RSA加密/解密及签名/验证功能示例
本文实例讲述了Python下实现的RSA加密/解密及签名/验证功能.分享给大家供大家参考,具体如下: 原文是py2环境,而我的环境是py3,所以对原代码做了修改:decode(), encode() import rsa # 生成密钥 (pubkey, privkey) = rsa.newkeys(1024) # 保存密钥 with open('public.pem','w+') as f: f.write(pubkey.save_pkcs1().decode()) with open('pri
-
python 实现批量文件加密功能
目录 一.源码 1.结果展示 2.源码 二.源码注释 1.所使用依赖包 2.函数功能 3.代码拓展 三.可运行环境 一.源码 1.结果展示 python自动化办公现在可不是一个陌生的词,也随着人们对自己隐私越来越看重,就会出现这样的需求:每人一个PDF文件,因有个人隐私信息,所以需要对文件进行加密且密码为本人身份证后六位. 废话不多说,上结论,程序运行结果如下: 我们去一探究竟,原文件如下: 获取密码如下: 将文件加密以后结果如下: 我们随机打开一个验证一下: 输入
-
Python密码学概述双倍强度加密教程
目录 使用python进行密码学 加密术语 纯文本 密文 加密 解密 现代密码学的特征 双倍强度加密级别 第一层加密 第二层加密 第三层加密 混合密码术 Python语言的特性 解释 面向对象 Python语言的关键点 Python字符串 Python列表 Python元组 Python Dictionary 加密软件包 使用python进行密码学 密码学是两个用户之间通过编码消息进行通信的艺术.密码学科学的出现基本动机是为从一方转移到另一方的机密信息提供安全保障. 密码学被定义为隐藏信息以引入
-
基于python实现文件加密功能
这篇文章主要介绍了基于python实现文件加密功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而强化自身的编程能力. 基础知识 在 Python 中异或操作符为:^,也可以记作 XOR.按位异或的意思是:相同值异或为 0,不同值异或为 1.具体来
-
Python脚本实现虾米网签到功能
本文实例讲述了Python脚本实现虾米网签到功能的方法.分享给大家供大家参考,具体如下: 概述 这个脚本完成了自动登录虾米网.签到的功能. 大致要用到urllib.urllib2.cookielib这几个模块.其实就是用python实现向指定的url去post数据. 至于我怎么知道在浏览器里面登录和签到时浏览器都向服务器post了什么数据的问题,可以用强大的chrome:F12->Network里面可以看得到.有的服务器登录成功后会让客户端浏览器跳转或者立即刷新一次页面等等,会把登录时向服务器p
-
Python实现的字典值比较功能示例
本文实例讲述了Python实现的字典值比较功能.分享给大家供大家参考,具体如下: #coding=utf8 import logging import os from Lib.DealCsv import ExceptPropertyDic from wxPython._wx import false ''''' 用于json数据的比较,包含属性.属性值的比较. ''' #用于比较字符串.列表 PATH=lambda p:os.path.abspath(os.path.join( os.path
-
Python爬虫如何破解JS加密的Cookie
通过Fiddler抓包比较,基本可以确定是JavaScript生成加密Cookie导致原来的请求返回521. 发现问题: 打开Fiddler软件,用浏览器打开目标站点(http://www.kuaidaili.com/proxylist/2/) .可以发现浏览器对这个页面加载了两次,第一次返回521,第二次才正常返回数据.很多没有写过网站或是爬虫经验不足的童鞋,可能就会觉得奇怪为什么会这样?为什么浏览器可能正常返回数据而代码却不行? 仔细观察两次返回的结果可以发现: 1.第二次请求比第一次请求的
-
python教程网络爬虫及数据可视化原理解析
目录 1 项目背景 1.1Python的优势 1.2网络爬虫 1.3数据可视化 1.4Python环境介绍 1.4.1简介 1.4.2特点 1.5扩展库介绍 1.5.1安装模块 1.5.2主要模块介绍 2需求分析 2.1 网络爬虫需求 2.2 数据可视化需求 3总体设计 3.1 网页分析 3.2 数据可视化设计 4方案实施 4.1网络爬虫代码 4.2 数据可视化代码 5 效果展示 5.1 网络爬虫 5.1.1 爬取近五年主要城市数据 5.1.2 爬取2019年各省GDP 5.1.3 爬取豆瓣电影
随机推荐
- 分享2个jQuery插件--jquery.fileupload与artdialog
- JSF中confirm弹出框的用法示例介绍
- 正则表达式学习教程之回溯引用backreference详解
- SpringBoot定时任务两种(Spring Schedule 与 Quartz 整合 )实现方法
- Android裁剪图片为圆形图片的实现原理与代码
- .NET微信公众号开发之公众号消息处理
- javascript中闭包(Closure)详解
- asp.net for循环语句第1/2页
- Python显示进度条的方法
- 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
- Android查看电池电量的方法(基于BroadcastReceiver)
- 基于Kubernetes和Docke实现留言簿案例
- Ionic 2 实现列表滑动删除按钮的方法
- KindEditor 编辑器 v3.5.1 修改版
- SQL"不能为新插入的行确定标识"错误的解决方法
- jquery 可拖拽的窗体控件实现代码
- jquery怎样实现ajax联动框(二)
- IIS绑定域名图解教程
- Apache 内容动态缓冲模块 mod_cache应用
- c#远程html数据抓取实例分享