Я пытаюсь зашифровать какой-нибудь простой текст с использованием закрытого и открытого ключа.
Я использую python, и это то, с чем я работаю, чтобы начать.
from hashlib import md5
from base64 import b64decode
from base64 import b64encode
from Crypto import Random
BLOCK_SIZE = 16 # Bytes
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * \
str(BLOCK_SIZE - len(s) % BLOCK_SIZE)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]
class AESCipher:
"""
Usage:
c = AESCipher('password').encrypt('message')
m = AESCipher('password').decrypt(c)
Tested under Python 3 and PyCrypto 2.6.1.
"""
def __init__(self, key):
self.key = md5(key.encode('utf8')).hexdigest()
def encrypt(self, raw):
raw = pad(raw)
iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return b64encode(iv + cipher.encrypt(raw))
def decrypt(self, enc):
enc = b64decode(enc)
iv = enc[:16]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return unpad(cipher.decrypt(enc[16:])).decode('utf8')
##
# MAIN
# Just a test.
msg = input('Message...: ')
pwd = input('Password..: ')
c = AESCipher(pwd).encrypt(msg.encode('utf8'))
m = AESCipher(pwd).decrypt(c)
# print('Ciphertext:', AESCipher(pwd).encrypt(msg.encode('utf8')))
Я получаю эту ошибку в Pycharm
Трассировка (последний последний вызов):
Файл "... / PycharmProjects / test / App.py", строка 97,в c = AESCipher (pwd) .encrypt (msg.encode ('utf8'))
Файл "... / PycharmProjects / test / App.py", строка 79, в зашифрованном виде
raw = pad(raw) File ".../PycharmProjects/test/App.py", line 63, in <lambda>
str(BLOCK_SIZE - len(s) % BLOCK_SIZE) TypeError: can't concat str to bytes
Как изменить тип заполнения блока с str на byte?