Шифрование DES в Python - PullRequest
       27

Шифрование DES в Python

0 голосов
/ 27 января 2020

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))

Это мое сообщение об ошибке:

Traceback (последний вызов был последним): файл "C: \ Users \ Raj_7 \ Desktop \ des.py", строка 10, в des = DES.new (ключ, DES.MODE_ECB)

Файл "D: \ Python \ lib \ site-packages \ Crypto \ Cipher \ DES.py", строка 145, в новом возвращаемом _create_cipher (sys.modules [ name ], ключ, mode, * args, ** kwargs)

Файл "D: \ Python \ lib \ site-packages \ Crypto \ Cipher__init __. py", строка 79, в режимах возврата _create_cipher [mode] (фабричный, ** 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 result = start_operation (c_uint8_ptr (key),

Файл" D: \ Python \ lib \ site-packages \ Crypto \ Util_raw_api " .py ", строка 234, в c_uint8_ptr

* 1 022 * повышение TypeError («Тип объекта% s не может быть передан в C код»% type (data)) TypeError: Тип объекта не может быть передан в C код

1 Ответ

0 голосов
/ 27 января 2020

Это работает здесь, если я использую байтов вместо строк

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))
...