python AES加密/解密器使用PyCrypto

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python AES加密/解密器使用PyCrypto相关的知识,希望对你有一定的参考价值。

import random
import string
from base64 import b64decode, b64encode
from Crypto.Cipher import AES

BLOCK_SIZE = 128 // 8

def pkcs7_pad(s):
    pad_len = BLOCK_SIZE - (len(s) % BLOCK_SIZE)
    return s + (pad_len * chr(pad_len))

def pkcs7_unpad(s):
    pad_len = ord(s[-1])
    return s[:-pad_len]


class Aes128Cipher(object):
    def __init__(self, clip_key):
        self.key = clip_key[:32]
        self.iv = clip_key[:16]

    @property
    def aes(self):
        """매번 새로운 AES 객체를 만들어야 한다"""
        return AES.new(self.key, AES.MODE_CBC, self.iv)

    def encrypt(self, s):
        return b64encode(self.aes.encrypt(pkcs7_pad(s))).decode()

    def decrypt(self, s):
        return pkcs7_unpad(self.aes.decrypt(b64decode(s)).decode())


def test():
    aes = Aes128Cipher('oe123ry7f8iqdsghfbhjaslfjfuyrbeg')
    random_str = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(123))

    assert aes.encrypt('110236') == 'xjB4l+Zb3v88x2OTV+FEmA=='
    assert aes.decrypt(aes.encrypt(random_str)) == random_str

    print('All Test Passed')


if __name__ == '__main__':
    test()

以上是关于python AES加密/解密器使用PyCrypto的主要内容,如果未能解决你的问题,请参考以下文章

python实现aes加密解密

python实现AES加密解密

python中的AES加密与解密

python-aes(ECB)加解密-支持16/32位

python AES双向对称加密解密

python3 AES加密解密