weixin_43678184 2020-03-05 00:15 采纳率: 0%
浏览 244

Python关于AES加密程序的运行出现error,有大神相助吗?

代码如下:(AES CBC模式加密)

# 导入图像处理标准库
from PIL import Image
# 导入Cryptodome库,引用aes加密模块
from Cryptodome import AES
import random
import string


# 随机生成16个由小写字母组成的字符串
def key_generator(size = 16, chars = string.ascii_lowercase):
    return ''.join(random.choice(chars) for _ in range(size))


#filename = "d:/blackhat.bmp"
#filename_encrypted_cbc = "blackhat_encrypted_cbc"
#formatt = "BMP"
# 利用函数随机生成一个由小写字母组成的字符串
#key = key_generator(16)
#print("key:"+key)


# AES加密的明文空间为16的整数倍,不能整除,则需要进行填充
# 在对应的ascii中,"\x00"表示为0x00,具体的值为NULL,b表示以字节表示
def pad(data):
    return data + b"\x00" * (16 - len(data) % 16)



# 将图像的数据映射为RGB
def trans_format_rbg(data):
    # tuple:不可变,保证数据不丢失
    red, green, blue = tuple(map(lambda e: [data[i] for i in range(0, len(data)) if i % 3 == e], [0, 1, 2]))
    pixels = tuple(zip(red, green, blue))
    return pixels


# CBC加密
def aes_cbc_encrypt(key1, data, mode=AES.MODE_CBC):
    # iv为随机值
    iv = key_generator(16)
    aes = AES.new(key1, mode, iv)
    new_data = aes.encrypt(data)
    return new_data


def encrypt_image_cbc(filename1):
# 打开bmp图片,然后将之转换为RGB图像
        im = Image.open(filename1)
        value_vector = im.convert("RGB").tobytes()

        # 将图像数据转换为像素值字节
        imlength = len(value_vector)

        # 将填充、加密后的数据进行像素值映射
        value_encrypt = trans_format_rbg(aes_cbc_encrypt(key, pad(value_vector))[:imlength])

        # 创建一个新对象,存储相对应的值
        im2 = Image.new(im.mode, im.size)
        im2.putdata(value_encrypt)

        # 将对象保存为对应格式的图像
        im2.save(filename_encrypted_cbc + "." + formatt, format)
        # im2.save(filename_encrypted_cbc+".bmp")


key = key_generator(16)
filename = "d:/blackhat.bmp"
filename_encrypted_cbc = "blackhat_encrypted_cbc"
formatt = "BMP"
encrypt_image_cbc(filename)
im = Image.open(filename)
im.show()

运行后出现如下错误:
Traceback (most recent call last):
File "C:/Users/GYW/PycharmProjects/untitled/CBC encrypt", line 74, in
encrypt_image_cbc(filename)
File "C:/Users/GYW/PycharmProjects/untitled/CBC encrypt", line 59, in encrypt_image_cbc
value_encrypt = trans_format_rbg(aes_cbc_encrypt(key, pad(value_vector))[:imlength])
File "C:/Users/GYW/PycharmProjects/untitled/CBC encrypt", line 45, in aes_cbc_encrypt
aes = AES.new(key1, mode, iv)
File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\AES.py", line 232, in new
return create_cipher(sys.modules[_name__], key, mode, *args, **kwargs)
File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\Cipher__init__.py", line 79, in _create_cipher
return modesmode
File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\Cipher_mode_cbc.py", line 274, in _create_cbc_cipher
cipher_state = factory._create_base_cipher(kwargs)
File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\AES.py", line 103, in _create_base_cipher
result = start_operation(c_uint8_ptr(key),
File "C:\Users\GYW\PycharmProjects\untitled\venv\lib\site-packages\Cryptodome\Util_raw_api.py", line 238, in c_uint8_ptr
raise TypeError("Object type %s cannot be passed to C code" % type(data))
TypeError: Object type cannot be passed to C code

Process finished with exit code 1

刚接触python 求大神拉一把~

  • 写回答

1条回答

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 17:37
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!