美文网首页
2021-04-05 python实现AES加密

2021-04-05 python实现AES加密

作者: TheRightPath1 | 来源:发表于2021-08-17 17:23 被阅读0次
    import binascii
    from Crypto.Cipher import AES
    from Crypto.Util.Padding import pad, unpad
    
    key = b"1234123412ABCDEF"
    iv = b"ABCDEF1234123412"
    data = b"zhiliao"
    
    
    def encrypt():
        # 参数key: 秘钥,要求是bytes类型,并且长度必须是16、24或32 bytes,因为秘钥的长度可以为:128位、192位、256位
        # 参数mode: 加密的模式,有ECB、CBC等等,最常用的是CBC
        # 参数iv: 初始向量,是CBC加密模式需要的初始向量,类似于加密算法中的盐
        # 创建用于加密的AES对象
        cipher1 = AES.new(key, AES.MODE_CBC, iv)
        # 使用对象进行加密,加密的时候,需要使用pad对数据进行填充,因为加密的数据要求必须是能被128整除
        # pad参数内容,第一个是待填充的数据,第二个是填充成多大的数据,需要填充成128位即16bytes
        ct = cipher1.encrypt(pad(data, 16))
        # 将加密后的结果(二进制)转换成十六进制的或者其它形式
        ct_hex = binascii.b2a_hex(ct)
        return ct_hex
    
    
    def decrypt(ct_hex):
        # 创建用于解密的AES对象
        cipher2 = AES.new(key, AES.MODE_CBC, iv)
        # 将十六进制的数据转换成二进制
        hex_data = binascii.a2b_hex(ct_hex)
        # 解密完成后,需要对数据进行取消填充,获取原来的数据
        pt = unpad(cipher2.decrypt(hex_data), 16)
        return pt
    
    
    if __name__ == '__main__':
        print("原始数据:",data)
        enc_data = encrypt()
        print("加密后的数据:",enc_data)
        dec_data = decrypt(enc_data)
        print("解密后的数据:", dec_data)
    

    输出结果

    原始数据: b'zhiliao'
    加密后的数据: b'e376c278392567b329e3f9dea06abe14'
    解密后的数据: b'zhiliao'
    

    相关文章

      网友评论

          本文标题:2021-04-05 python实现AES加密

          本文链接:https://www.haomeiwen.com/subject/xxodkltx.html