首页 > 解决方案 > Python中的DES加密

问题描述

pycryptodome 工作正常,但我收到一条错误消息。

这是我的代码:

from Crypto.Cipher import DES

key = 'hello123'

def pad(text):
        while len(text) % 8 != 0:
            text += ''
        return text

des = DES.new(key, DES.MODE_ECB)

text1 = 'Python is the Best Language!'

padded_text = pad(text1)

encrypted_text = des.encrypt(padded_text)

print(encrypted_text)

print(des.decrypt(encrypted_text))

这是我的错误信息:

回溯(最近一次调用最后):文件“C:\Users\Raj_7\Desktop\des.py”,第 10 行,在 des = DES.new(key, DES.MODE_ECB)

文件“D:\Python\lib\site-packages\Crypto\Cipher\DES.py”,第 145 行,新返回 _create_cipher(sys.modules[ name ], key, mode, *args, **kwargs)

文件“D:\Python\lib\site-packages\Crypto\Cipher__init__.py”,第 79 行,_create_cipher 返回模式[模式](工厂,**kwargs)

文件“D:\Python\lib\site-packages\Crypto\Cipher_mode_ecb.py”,第 215 行,在 _create_ecb_cipher cipher_state = factory._create_base_cipher(kwargs)

文件“D:\Python\lib\site-packages\Crypto\Cipher\DES.py”,第 76 行,在 _create_base_cipher 结果 = start_operation(c_uint8_ptr(key),

文件“D:\Python\lib\site-packages\Crypto\Util_raw_api.py”,第 234 行,在 c_uint8_ptr

raise TypeError("对象类型 %s 不能传递给 C 代码" % type(data)) TypeError: 对象类型不能传递给 C 代码

标签: python-3.xdes

解决方案


如果我使用字节而不是字符串,它在这里工作

from Crypto.Cipher import DES

def pad(text):
    n = len(text) % 8
    return text + (b' ' * n)


key = b'hello123'
text1 = b'Python is the Best Language!'

des = DES.new(key, DES.MODE_ECB)

padded_text = pad(text1)
encrypted_text = des.encrypt(padded_text)

print(encrypted_text)
print(des.decrypt(encrypted_text))

推荐阅读