python 对称加密

安装插件
crypto != pip install crypto 不要直接安装
pip install pycryptodome # 安装pycryptodome

from Crypto.Cipher import AES
import base64


# DES  --- 对称
# AES  --- 对称 (用它 -- 加密、解密)
# RC4  --- 对称

# 代码-- 实现 -- 库应该是什么?
# crypto   != pip install crypto 不要直接安装
# pip install pycryptodome # 安装pycryptodome

class EncryptDate:
    # 构造方法
    def __init__(self, key):
        # 密码,同时要变成一个utf-8
        self.key = key.encode("utf-8")
        # 长度,默认是16--初始化
        self.length = AES.block_size
        # 加密的模式设置一下
        self.aes = AES.new(self.key, AES.MODE_ECB)

    def pad(self, text): # tony
        """
        #填充函数,使被加密数据的字节码长度是block_size的整数倍
        """
        # 计算它的长度
        count = len(text.encode('utf-8'))
        print(count)
        # 传过来的是4位 -- 补齐:12位
        # 传过来的是8位 -- 补齐:8位
        # 传过来的是20位 -- 补齐:12位

        print('*' * 50)
        print(self.length)
        print('*' * 50)

        # 问题:怎么补齐对应的位数:= 16 -(count%16) :
        add = self.length - (count % self.length)
        entext = text + (chr(add) * add)
        return entext

    # 加密
    def encrypt(self, text):
        # 把数据变成utf-8  --  16
        # 问题:传过来的数据一定是16的倍数吗?
        # 解决:写一个方法,把text缺少的部分数据进行补全
        # self.aes.encrypt(text.encode("utf-8"))
        #  1. 进行加密:encrypt()自带
        res = self.aes.encrypt(self.pad(text).encode("utf8"))
        #  2. 把对应的数据再转成base64位
        msg = str(base64.b64encode(res), encoding ="utf8")
        #  3. 返回
        return msg

    # 解密
    def decrypt(self, decrData):  # 解密函数
        # 1. 把对应的数据转成base64(前提把他变成utf-8)
        res = base64.decodebytes(decrData.encode("utf8"))
        msg = self.aes.decrypt(res).decode("utf8")

        # 会把部位的输出,所以要去掉。
        # return self.unpad(msg)
        return msg


if __name__ == '__main__':
    # 秘钥都是通过key去获取
    key = "1234567812345678"
    ase = EncryptDate(key)
    data = ase.encrypt(str("tony"))
    print(data)

    print("---解密---")
    text = "XbXHJrNLwoTVcyfqM9eTgQ=="
    data = ase.decrypt(text)
    print(data)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值