Python 实现基于异或运算的文件加密与解密
本文详细介绍如何利用 Python 实现基于异或(XOR)运算的文件加密功能。文章从异或运算的基础性质出发,解析其可逆性原理,并演示如何使用 Python 3.6 引入的 secrets 库生成安全随机密钥。通过 encrypt 和 decrypt 函数,实现字符串到整数、字节流的转换与异或处理,最终完成文本文件的加密与解密操作,确保还原后的文件与原文件一致。
基础知识
在 Python 编程语言中,异或操作符表示为 ^,也可记作 XOR。按位异或的核心逻辑是:当两个操作数的对应位相同时结果为 0,不同时结果为 1。具体而言,存在四种组合情况:0 与 0 异或得 0,0 与 1 异或得 1,1 与 0 异或得 1,以及 1 与 1 异或得 0。基于此可以总结出两条关键规律(假设 A 为 0 或 1):任何数与 0 进行异或运算,结果仍为该数本身;任何数与 1 进行异或运算,结果为该数的反值。
让我们分析一下一位二进制数所具备的性质:
一位二进制数与自身进行异或运算,结果恒为 0
b ^ b = 0
异或运算满足交换律
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
任何数与 0 进行异或运算,结果仍为该数
(a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a
可以验证,上述性质同样适用于任意长度的二进制数。
原理
在理解异或运算的基本性质后,加密的核心原理便一目了然。
加密操作:
首先,将待加密文件转换为二进制数据表示;接着,生成一个与该二进制数据等长的随机密钥;最后,将原始二进制数据与随机密钥进行异或运算,从而生成加密后的二进制数据。
解密操作:
将加密后的二进制数据与原始生成的随机密钥再次进行异或运算,即可还原出原始二进制数据;最后,将还原后的二进制数据转换回原始的文本文件。
生成随机密钥:
secrets 库是 Python 3.6 版本引入的伪随机数生成模块,特别适用于生成高安全性的随机密钥。其中,token_bytes 函数接收一个整数参数,用于指定生成的随机字节串长度。随后,利用 int.from_bytes 函数将该字节串转换为整数,即为我们所需的二进制数值表示。
加密单元:
encrypt 函数接收一个字符串对象作为输入,并返回一个包含两个整数的元组 (int, int)。首先,通过 encode 方法将字符串编码为字节串;接着,使用 int.from_bytes 函数将字节串转换为整数对象;最后,对该整数对象与随机密钥执行异或运算,即得到加密后的文本数据。
解密单元:
decrypt 函数接收两个整数对象,分别代表加密文本和随机密钥。首先,对这两个整数执行异或运算,计算出解密后的整数对象。为了确定该整数所占的字节数,使用 decrypted.bit_length 函数获取其二进制位数,将其除以 8 得到理论字节大小。由于 1 到 7 位的二进制数整除 8 结果为 0,因此需先加 7 再整除 8,以修正计算误差。最后,利用 int.to_bytes 函数将解密后的整数转换回字节对象,并通过 decode 方法将字节串还原为字符串。
利用上述定义的函数,我们可以轻松地对文本文件执行加密和解密操作。
加密文本文件
path 参数指定待加密文件的路径。如果未指定密钥文件的保存路径,程序将在当前目录下自动创建相应的目录和文件以存储密钥。
解密文件
完成加密和解密文件的操作后,对比生成的解密文件与原文件,两者内容完全相同。
以上就是使用 Python 进行文件加密的全部内容,感谢大家的阅读与支持,欢迎转发分享,期待未来继续得到大家的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









