用python实现AES算法批量加密文件

之前用异或算法自己加密文件,感觉密码还是太弱,在网上传输需要优秀的算法。于是用AES对称加密算法实现对电脑文件的加密。

实现主要有两个.py文件,一个是ecy.py,主要写了加密的核心算法。另一个是QT Desinger生成的界面文件,用信号与槽与核心算法链接。

一、算法文件

主要实现一个文件夹中文件的遍历,对每一个文件进行加解密操作,生成的新文件还放在该文件夹中。老文件可以删除,也可以保留。还可以选择是否对文件重新命名。下面是ecy.py文件。

from Crypto.Cipher  import AES
import os

# 密钥(key), 密斯偏移量(iv) CBC模式加密

BLOCK_SIZE = 16  # Bytes
def pad(bs):
    rbs=(BLOCK_SIZE - len(bs) % BLOCK_SIZE) * chr(BLOCK_SIZE - len(bs) % BLOCK_SIZE)
    rb=rbs.encode('utf8')
    rb=bs+rb
    return rb

unpad = lambda s: s[:-ord(s[len(s) - 1:])]
vi = b'0102030405060708'

def encrypt_all(path1,key,flag,remove,rename):
    """
    :param path1: 操作文件的路径
    :param key: 密码
    :param flag: 加解密标志。False位加密,True为解密
    :param remove: False是不删除原文件,True删除源文件。
    :param rename: False是添加前缀,True是不添加前缀。
    :return:
    """
    for root, dirs, files in os.walk(path1):
        for name in files:
            path3 = os.path.join(root, name)
            if not flag:
                name1 = "ej_" + name
            else:
                name1 = "dj_" + name
            path4 = os.path.join(root, name1)
            print(str(path3))
            fin = open(path3, "rb+")
            fou = open(path4, "ab+")
            if not flag:
                while True:
                    byt1 = fin.read(1023)
                    if not byt1:
                        break
                    byt2 = AES_Encrypt(key, byt1)
                    fou.write(byt2)
            else:
                while True:
                    byt1 = fin.read(1024)
                    if not byt1:
                        break
                    byt2 = AES_Decrypt(key, byt1)
                    fou.write(byt2)
            fin.close()
            fou.close()
            if remove:
                os.remove(path3)
                if rename:
                    os.rename(path4, path3)
def make_key(key):
    '''
        密码必须是16字节的。如果小于16字节,如果小于16位,直接复制。如果大于16位,直接剪掉。
        等下要考虑密码为空的情况。
    '
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值