python3 rsa(MD5)AES 加密解密(文件压缩)

1、md5加盐加密

str_ = 'this is str'
salt = 'salt'
str_s = str_ + salt
res_str = hashlib.md5(str_s.encode('utf-8')).hexdigest()
print(res_str)

2、rsa加密解密

需要依赖安装第三方包

pip3 install rsa
import rsa


# rsa加密
def rsaEncrypt(str):
    # 生成公钥、私钥
    (pubkey, privkey) = rsa.newkeys(512)
    print("公钥:\n%s\n私钥:\n:%s" % (pubkey, privkey))
    # 明文编码格式
    content = str.encode("utf-8")
    # 公钥加密
    crypto = rsa.encrypt(content, pubkey)
    return (crypto, privkey)


# rsa解密
def rsaDecrypt(str, pk):
    # 私钥解密
    content = rsa.decrypt(str, pk)
    con = content.decode("utf-8")
    return con


if __name__ == "__main__":
    str, pk = rsaEncrypt("this is str")
    print("加密后密文:\n%s" % str)
    content = rsaDecrypt(str, pk)
    print("解密后明文:\n%s" % content)

转载https://blog.csdn.net/whatday/article/details/97617461

3、AES加密解密

  • AES加密有好几种模式,本文介绍CBC模式和ECB模式,
    CBC使用密码和salt(起扰乱作用)按固定算法(md5)产生key和iv。然后用key和iv(初始向量,加密第一块明文)加密(明文)和解密(密文)。
  • 这两种加密模式,key,vi,和加密的数据的长度必须为16(AES-128)的倍数,所以采用补位的方式,所以在解密完成后也要去除补位的\x00

1、需要安装第三方包

pip3 install pycryptodome

2、CBC模式:

from Crypto.Cipher import AES


class CypherAES:

    def __init__(self, key=b'123123131213', vi=b'111111111111'):
        self.vi = self.add_to_hex(vi)
        self.key = self.add_to_hex(key)

    def add_to_hex(self, data_byte):
        if isinstance(data_byte, str):
            data_byte = data_byte.encode()
        while len(data_byte) % 16 != 0:
            data_byte += b'\x00'
        return data_byte

    def encrypt(self, data):
        add_data = self.add_to_hex(data)
        aes = AES.new(self.key, AES.MODE_CBC, self.vi)
        if isinstance(add_data, str):
            add_data = add_data.encode()
        encrypt_data = aes.encrypt(add_data)
        return encrypt_data

    def decrypt(self, encrypt_data):
        aes = AES.new(self.key, AES.MODE_CBC, self.vi)
        decrypt_data = aes.decrypt(encrypt_data)
        return decrypt_data.decode().strip(b'\x00'.decode())


aes = CypherAES()
ss = aes.encrypt('11111111112323123')
print(ss)
rrr = aes.decrypt(ss)
print(rrr)

3、ECB模式:

自定义key,其中key可以进行md5加盐加密

from Crypto.Cipher import AES


class CypherAES:

    def __init__(self, key=b'123123131213'):
        add_key = self.add_to_hex(key)
        self.aes = AES.new(add_key, AES.MODE_ECB)

    def add_to_hex(self, data_byte):
        if isinstance(data_byte, str):
            data_byte = data_byte.encode()
        while len(data_byte) % 16 != 0:
            data_byte += b'\x00'
        return data_byte

    def encrypt(self, data):
        add_data = self.add_to_hex(data)
        if isinstance(add_data, str):
            add_data = add_data.encode()
        encrypt_data = self.aes.encrypt(add_data)
        return encrypt_data

    def decrypt(self, encrypt_data):
        decrypt_data = self.aes.decrypt(encrypt_data)
        return decrypt_data.decode().strip(b'\x00'.decode())

aes = CypherAES()
ss = aes.encrypt('11111111112323123')
print(ss)
rrr = aes.decrypt(ss)
print(rrr)

4、扩展:

可将字符串转为字节码对象,再用exec执行,获取结果

obj = compile(rrr, '', 'exec')
exec(obj)

4、zip文件压缩加密

1、使用zipfile进行压缩/解压缩

import zipfile


def zipFile(filename, outFullName):
    """
    压缩指定文件夹
    :param filename: 目标文件
    :param outFullName: 压缩文件
    :return: 无
    """
    fzip = zipfile.ZipFile(outFullName, "w", zipfile.ZIP_DEFLATED)
    fzip.write(filename)
    fzip.close()

# fzip.setpassword(pwd=b'123')  ,只适用对带密码的文件进行解密,不能进行加密

2、使用pyzipper进行加密压缩

def ace_Zip(filename, outFullName):
    """
    :param filename:  目标文件
    :param outFullName:压缩文件
    :return:
    """
    secret_password = b'123445'
    with pyzipper.AESZipFile(outFullName, 'w', compression=pyzipper.ZIP_LZMA, encryption=pyzipper.WZ_AES) as zf:
        zf.pwd = secret_password
        zf.write(filename)

3、使用zipfile进行解密压缩

仅支持CRC32加密的zip文件

import zipfile
def jieya(zipfile1):
	"""
    :param zipfile1: zip文件
    :return: 
    """
    zfile = zipfile.ZipFile(zipfile1, 'r')
    pwd = b'123445'
    try:
        zfile.extractall(pwd=pwd)
        return '文件解压密码为:%s'%pwd.decode()
    except Exception as e:
        print(e)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值