基于python实现文件加密功能

这篇文章主要介绍了基于python实现文件加密功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库。

但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而强化自身的编程能力。

基础知识

在 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,也就是我们需要的二进制数。

from secrets import token_bytes

def random_key(length):
  key = token_bytes(nbytes=length)
  key_int = int.from_bytes(key, 'big')
  return key_int

加密单元:

encrypt 函数接受一个 str 对象,返回元组 (int, int)。通过 encode 方法,我们将字符串编码成字节串。int.from_bytes 函数将字节串转换为 int 对象。最后对二进制对象和随机密钥进行异或操作,就得到了加密文本。

def encrypt(raw):
  raw_bytes = raw.encode()
  raw_int = int.from_bytes(raw_bytes, 'big')
  key_int = random_key(len(raw_bytes))
  return raw_int ^ key_int, key_int

解密单元:

decrypt 接受两个 int 对象,分别为加密文本和随机密钥。首先对两者进行异或操作,计算解密出来的 int 对象所占比特数。decrypted.bit_length 函数得到的是二进制数的位数,除以 8 可以得到所占比特大小。为了防止,1 ~ 7 位的二进制数整除 8 得到 0,所以要加上 7,然后再进行整除 8 的操作。使用 int.to_bytes 函数将解密之后的 int 的对象转换成 bytes 对象。最后通过 decode 方法,将字节串转换成字符串。

def decrypt(encrypted, key_int):
  decrypted = encrypted ^ key_int
  length = (decrypted.bit_length() + 7) // 8
  decrypted_bytes = int.to_bytes(decrypted, length, 'big')
  return decrypted_bytes.decode()

利用上述函数,我们可以很轻松对文本文件进行加密、解密操作。

>>> raw = '画图省识春风面,环珮空归夜月魂'
>>> encrypted = encrypt(raw)
>>> encrypted
(217447100157746604585...,
 9697901906831571319...)
>>> decrypt(*encrypted)
'画图省识春风面,环珮空归夜月魂'

加密文本文件

path 为待加密文件的地址,如果不指定密钥地址,则在该目录下新建目录和文件。

import json
from pathlib import Path

def encrypt_file(path, key_path=None, *, encoding='utf-8'):
  path = Path(path)
  cwd = path.cwd() / path.name.split('.')[0]
  path_encrypted = cwd / path.name
  if key_path is None:
    key_path = cwd / 'key'
  if not cwd.exists():
    cwd.mkdir()
    path_encrypted.touch()
    key_path.touch()

  with path.open('rt', encoding=encoding) as f1, \
    path_encrypted.open('wt', encoding=encoding) as f2, \
      key_path.open('wt', encoding=encoding) as f3:
    encrypted, key = encrypt(f1.read())
    json.dump(encrypted, f2)
    json.dump(key, f3)

解密文件

#Python学习群592539176
def decrypt_file(path_encrypted, key_path=None, *, encoding='utf-8'):
  path_encrypted = Path(path_encrypted)
  cwd = path_encrypted.cwd()
  path_decrypted = cwd / 'decrypted'
  if not path_decrypted.exists():
    path_decrypted.mkdir()
    path_decrypted /= path_encrypted.name
    path_decrypted.touch()
  if key_path is None:
    key_path = cwd / 'key'
  with path_encrypted.open('rt', encoding=encoding) as f1, \
    key_path.open('rt', encoding=encoding) as f2, \
    path_decrypted.open('wt', encoding=encoding) as f3:
    decrypted = decrypt(json.load(f1), json.load(f2))
    f3.write(decrypted)

执行完加密、解密文件操作,得到的解密文件与原文件相同,示意图如下:

以上就是 Python 加密文件的全部内容,还请大家多多转发支持。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python基于hashlib模块的文件MD5一致性加密验证示例

    本文实例讲述了Python基于hashlib模块的文件MD5一致性加密验证.分享给大家供大家参考,具体如下: 使用hashlib模块,可对文件MD5一致性加密验证: #python 检测文件MD5值 #python version 2.6 import hashlib import os,sys #简单的测试一个字符串的MD5值 def GetStrMd5(src): m0=hashlib.md5() m0.update(src) print m0.hexdigest() pass #大文件的M

  • Python编译成.so文件进行加密后调用的实现

    pyc的破解相对容易,使用cython将python文件编译成.so文件,能在一定程度上增强python源码的私密性. 编译成.so文件 环境准备:cython 测试脚本准备:test.py #-*-coding: UTF-8 -* - class test: def say(self): print 'hello' 脚本编译准备: 3.1 编写compile.py文件,内容如下: #-*-coding: UTF-8 -* - from distutils.core import setup f

  • python暴力解压rar加密文件过程详解

    第一次使用csdn写文章,写得不好还请见谅.(运行环境:python3.6) 下了一个带密码的压缩包文件,作为一个刚学python的新手,想着能不能用python暴力破解它,于是在网上搜了很多资料,看着似乎并不是很麻烦,也想试着自己写一个可以暴力破解的程序,在写的过程中却遇到了各种各样的问题,希望大手们能带带我.遇到的问题如下: zipfile和zipfile2似乎都不支持AES解密(https://bugs.python.org/issue9170) 在用rarfile暴力破解时即使密码错误也

  • Python中使用pypdf2合并、分割、加密pdf文件的代码详解

    朋友需要对一个pdf文件进行分割,在网上查了查发现这个pypdf2可以完成这些操作,所以就研究了下这个库,并做一些记录.首先pypdf2是python3版本的,在之前的2版本有一个对应pypdf库. 可以使用pip直接安装: pip install pypdf2 官方文档: pythonhosted.org/PyPDF2/ 里面主要有这几个类: PdfFileReader . 该类主要提供了对pdf文件的读操作,其构造方法为: PdfFileReader(stream, strict=True,

  • python破解zip加密文件的方法

    首先我们先来桌面创建一个文件 我们创建了一个名为q的txt文件然后我们将它压缩,压缩的时候记得设置上密码 我这边将密码设置为123456, 接下来我们打开我们的编写工具,开始写代码,我这里用的是pycharm,推荐大家使用 这里我们将使用到python的zipfile的模块,编写zip文件口令破解机要从学习 zipfile库的使用方法着手.打开 Python解释器,我们 用help( zipfile)命令进一步了解这个库,并重点看一下 Zip File类中的 extractall方法.这个类和这

  • RC4文件加密的python实现方法

    本文实例讲述了RC4文件加密的python实现方法.分享给大家供大家参考.具体分析如下: 基于RC4流加密算法,使用扩展的16*16的S盒,32字节密钥. 目前应该是比较安全的.   刚学习python,好不容易调通了. 而且在VC和python下各实现了一遍,两个平台能够互相加解密,很有成就感的说.   下面是python3.0中的实现,在2.x下需要稍加修改. # for python 3.0 # from 李勃 import struct,sys,os,binascii ""&q

  • python文件的md5加密方法

    本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 简单模式: from hashlib import md5 def md5_file(name): m = md5() a_file = open(name, 'rb') #需要使用二进制格式读取文件内容 m.update(a_file.read()) a_file.close() return m.hexdigest() if __main__ == '__init__': print md5_file('d:/

  • python实现文件快照加密保护的方法

    本文实例讲述了python实现文件快照加密保护的方法.分享给大家供大家参考.具体如下: 这段代码可以对指定的目录进行扫描,包含子目录,对指定扩展名的文件进行SHA-1加密后存储在cvs文件,以防止文件被篡改 调用方法:python snapper.py > todayCheck.csv # Hello, this is a script written in Python. See http://www.pyhon.org # # Snapper 1.2p # # This script wil

  • 基于python实现文件加密功能

    这篇文章主要介绍了基于python实现文件加密功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库. 但对于日常学习而言,我们可以借助异或操作,实现一个简单的文件加密程序,从而强化自身的编程能力. 基础知识 在 Python 中异或操作符为:^,也可以记作 XOR.按位异或的意思是:相同值异或为 0,不同值异或为 1.具体来

  • python 实现批量文件加密功能

    目录 一.源码 1.结果展示 2.源码 二.源码注释 1.所使用依赖包 2.函数功能 3.代码拓展 三.可运行环境 一.源码 1.结果展示   python自动化办公现在可不是一个陌生的词,也随着人们对自己隐私越来越看重,就会出现这样的需求:每人一个PDF文件,因有个人隐私信息,所以需要对文件进行加密且密码为本人身份证后六位.   废话不多说,上结论,程序运行结果如下:   我们去一探究竟,原文件如下:    获取密码如下:   将文件加密以后结果如下:   我们随机打开一个验证一下:   输入

  • 基于Python的文件类型和字符串详解

    1. Python的文件类型 1. 源代码--直接由Python解析 vi 1.py #!/usr/bin/python print 'hello world' 这里的1.py就是源代码 执行方式和shell脚本类似: chmod +x 后,./1.py Python 1.py 2. 字节代码 Python源码文件经编译后生成的扩展名为pyc的文件 编译方法: [root@t1 py]# cat 2.py #!/usr/bin/python import py_compile py_compil

  • 基于python实现百度翻译功能

    运行环境: python 3.6.0 今天处于练习的目的,就用 python 写了一个百度翻译,是如何做到的呢,其实呢就是拿到接口,通过这个接口去访问,不过中间确实是出现了点问题,不过都解决掉了 先晾图后晾代码 运行结果: 代码: # -*- coding: utf-8 -*- """ 功能:百度翻译 注意事项:中英文自动切换 """ import requests import re class Baidu_Translate(object):

  • 如何基于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创建目录文件夹

    这篇文章主要介绍了如何基于Python创建目录文件夹,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python对文件的操作还算是方便的,只需要包含os模块进来,使用相关函数即可实现目录的创建. 主要涉及到三个函数 1.os.path.exists(path) 判断一个目录是否存在 2.os.makedirs(path) 多层创建目录 3.os.mkdir(path) 创建目录 DEMO 直接上代码 def mkdir(path): # 引入模

  • 基于Python实现文件的压缩与解压缩

    目录 zip文件 tar.gz文件 rar文件 7z文件 在日常工作中,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理. 通常会涉及到的压缩文件格式有: rar:Windows 环境下用的比较多的压缩,比较著名的GUI工具是winrar tar: Linux系统下的打包工具,只打包,不压缩 gz:即gzip,通常只能压缩一个文件.与tar结合起来就可以实现先打包,再压缩. tgz:即gz.先用tar打包,然后再用gz压缩得到的文件 zip:不同于gzip,虽然使用相似的

  • 基于Python实现微信自动回复功能

    大家好,之前我们使用 WechatPCAPI 做了获取微信好友信息以及查看撤回消息,本文我们再使用 WechatPCAPI 来实现微信自动回复的功能. 实现自动回复的功能,我们需要用到图灵机器人,网址为:http://www.turingapi.com,我们在浏览器中输入上述网址打开,之后点击注册/登录按钮,如下图所示: 打开后如下图所示: 我们接着点击立即注册,就跳转到了注册页,如下图所示: 我们先填写必填信息,填写完之后点击注册按钮即可,注册成功之后便跳到了机器人管理页面,如下所示: 我们点

  • 基于python批量处理dat文件及科学计算方法详解

    摘要:主要介绍一些python的文件读取功能,文件内容修改,文件名后缀更改等操作. 批处理文件功能 import os path1 = 'C:\\Users\\awake_ljw\\Documents\\python for data analysis\\test1' path2 = 'C:\\Users\\awake_ljw\\Documents\\python for data analysis\\test2' filelist = os.listdir(path1) for files i

  • python密码学实现文件加密教程

    目录 代码 输出 说明 在Python中,可以在传输到通信通道之前加密和解密文件.为此,您必须使用插件 PyCrypto .您可以使用下面给出的命令安装此插件. pip install pycrypto 代码 用密码保护器加密文件的程序代码在下面提到 : # =================Other Configuration================ # Usages : usage = "usage: %prog [options] " # Version Version

随机推荐