栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python怎么对文件进行加密解密

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python怎么对文件进行加密解密

使用python的pycrypto库AES的CBC模式加密和解密文件

AES (Advanced Encryption Standard),它是一种加密对称密码算法,可用于加密和解密信息 。
该算法可以使用 128、192 和 256 位的密钥,并对 128 位(16 字节)的数据块进行操作 。
由于我们可能要加密大于 128 位的数据,因此我们需要使用块(block)模式进行加密。下面的例子会加密source.txt文件并将source.txt文件解密到target.txt文件 。

安装pycryptodome,文章使用Python 3.6.8

pip3 install pycryptodome

Python脚本内容
#!/usr/bin/env python3
from Crypto.Util.Padding import pad, unpad
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

#打开需要加密的文件并将内容赋值给data
in_file = open("/root/work/study/ransomware/source.txt", "rb") 
data = in_file.read() 
in_file.close()
print('source content %s from source.txt' %data)
#使用随机字符生成AES相关的参数
key = get_random_bytes(32)
iv = get_random_bytes(16)

cipher1 = AES.new(key, AES.MODE_CBC, iv)
#使用AES.MODE_CBC对data进行加密并赋值给ct
ct = cipher1.encrypt(pad(data, 16))
print ('encrypted content is %s rewrite to source.txt ' %ct)
#将加密后的数据回写至文件source.txt,得到加密后的source.txt
out_file = open("/root/work/study/ransomware/source.txt", "wb")
out_file.write(ct)
out_file.close()
#秘钥和向量IV没动过,所以使用秘钥进行解密并解密回target.txt
cipher2 = AES.new(key, AES.MODE_CBC, iv)
#解密文件
pt = unpad(cipher2.decrypt(ct), 16)
print('decrypt content %s to target.txt' %pt)
out_file = open("/root/work/study/ransomware/target.txt", "wb") 
out_file.write(pt)
out_file.close()

测试代码

[root@BlogServer ransomware]# ls
crypt.py  source.txt
[root@BlogServer ransomware]# cat source.txt 
this is source code
[root@BlogServer ransomware]# python3 crypt.py 
source content b'this is source coden' from source.txt
encrypted content is b'Axb3xe4x8flqxfb)~rx1cxedxefEkmxd3xceLx07)8x9fxb1xd7xa1x8ax90Lx8d 
AES的参数 

1. key length(密钥位数,密码长度)
2. key (密钥,密码)
3. IV (向量)
4. mode (加密模式)
5. padding (填充方式)

AES参数的意义
  1. key length(密钥位数,密码长度)
    AES128,AES192,AES256(128 位、192 位或 256 位)
    128位对应的是16个字节,所以部分平台库上,会使用16个字符或者长度为16的字符串来做密码。
  2. key (密钥,密码)
    key指的就是密码了,AES128就是128位的,如果位数不够,某些库可能会自动填充到128。
  3. IV (向量)
    IV称为初始向量,不同的IV加密后的字符串是不同的,加密和解密需要相同的IV。
  4. mode (加密模式)
    AES分为几种模式,比如ECB,CBC,CFB等等,这些模式除了ECB由于没有使用IV而不太安全,其他模式差别并没有太明显。
  5. padding (填充方式)
    对于加密解密两端需要使用同一的PADDING模式,大部分PADDING模式为PKCS5, PKCS7, NOPADDING。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/982120.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号