aes 128位加密/解密

# -*- coding: utf-8 -*-
import sys
from Crypto.Cipher import AES
from Crypto import Random
from binascii import b2a_hex, a2b_hex


class prpcrypt():
    def __init__(self, key):
        self.key = key      # key是bytes类型的
        self.mode = AES.MODE_CBC
        self.iv = Random.new().read(AES.block_size)
        print(self.iv, '二进制形式')
        print(b2a_hex(self.iv), '二进制的十六进制assicc形式')

    # 加密函数,如果text不是16的倍数【加密文本text必须为16的倍数!】,那就补足为16的倍数
    def encrypt(self, text):    # text 参数是bytes类型 输出 也是bytes类型
        cryptor = AES.new(self.key, self.mode, self.iv)
        # 这里密钥key 长度必须为16(AES-128)、24(AES-192)、或32(AES-256)Bytes 长度.目前AES-128足够用
        length = 16
        count = len(text)


        if count % length != 0:
            add = length - (count % length)
        else:
            add = 0
        text = text + (b'\0' * add)

        self.ciphertext = cryptor.encrypt(text)
        # 因为AES加密时候得到的字符串不一定是ascii字符集的,输出到终端或者保存时候可能存在问题
        # 所以这里统一把加密后的字符串转化为16进制字符串
        result = b2a_hex(self.ciphertext)   # bytes to ascii 形式,hex形式

        return result

        # 解密后,去掉补足的空格用strip() 去掉

    def decrypt(self, text):

        cryptor = AES.new(self.key, self.mode, self.iv)

        plain_text = cryptor.decrypt(a2b_hex(text))
        return plain_text.rstrip(b'\0')


if __name__ == '__main__':
    # 结论 如何加密,如何解密
    mp4_path = r'C:\Users\wangcc\Desktop\ads_svp_video__0b6bt4aagaaas4amgwefrvpbvhyeaopqaa2a.f40.mp4'
    with open(mp4_path, 'rb') as f:
        buf = f.read()
    pc = prpcrypt(b'keyskeyskeyskeys')  # 初始化密钥
    # e = pc.encrypt(b"0123456789ABCDEF")
    # print(buf, 'buf')
    e = pc.encrypt(buf)
    with open('encrypt.mp4', 'wb') as enf:
        enf.write(e)
    print(type(e), 'e en')
    d = pc.decrypt(e)
    with open('decrypt.mp4', 'wb') as df:
        df.write(d)

key文件,16位

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值