Python 对称加密ECB简单实现

利用pycrypto中的方法来实现简单的ECB对称加密
具体代码如下

from base64 import b64decode
from base64 import b64encode
from Crypto.Cipher import AES # pip install pycrypto==2.6.1
import time


class ECBCipher(object):
    '''
    定义一个基于AES的ECB模式的加解密类
    '''
    def __init__(self, key):
        '''
        定义构造方法,初始化key和加解密对象
        :params key:长度必须为16位
        '''
        if len(key) % 16 != 0:
            raise ValueError('key的长度必须为16的倍数。')
        self.key = key
        self.__cipher = AES.new(self.key.encode(),  AES.MODE_ECB)
    
    def __pad(self, s): # 私有方法
        '''
        定义PKCS7填充的私有方法,用于对目标进行补位填充
        '''
        return s + (AES.block_size - len(s) % AES.block_size) * chr(AES.block_size - len(s) % AES.block_size)
    
    def __unpad(self, s):
        '''
        定义去除填充的私有方法,用于对目标进行解码得到原始值
        '''
        return s[:-ord(s[-1:])]

    def encrypted(self, msg):
        '''
        定义加密方法,对目标进行加密,并返回一个byte类型的字符串
        :params msg:需要加密的明文
        '''
        try:
            return b64encode(self.__cipher.encrypt(self.__pad(msg).encode())).decode()
        except:
            return None

    def decrypted(self, encode_str):
        '''
        定义解密方法,对目标进行解密,并返回一个解密得到的字符串
        :params encode_str:需要解密的密文
        '''
        try:
            decode_str = self.__unpad(self.__cipher.decrypt(b64decode(encode_str))).decode()
            return decode_str if decode_str else None
        except:
            return None


if __name__ == '__main__':
    ecb_obj =  ECBCipher('16ed9ecc7d9011eab9c63c6aa7c68b67')
    need_crypto = 'e2d8fae47d4c11ea942cc8d9d2066a43+%s' % str(int(time.time()))
    encode_text = ecb_obj.encrypted(need_crypto )
    decode_text = ecb_obj.decrypted(encode_text)
    print('未加密字符串:', need_crypto)
    print('加密:', encode_text)
    print('解密:', decode_text)

输出:

未加密字符串: e2d8fae47d4c11ea942cc8d9d2066a43+1634544242
加密: zA1Ye1G6d3EGTelNMhnYvqkoNgMEH5sbgBMA8NbM+HcbaggnhmrHVkZNmoCrZtiQ
解密: e2d8fae47d4c11ea942cc8d9d2066a43+1634544242
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haeasringnar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值