как кодировать / декодировать простую строку

Я очень новичок в шифровании, мне нужно кодировать простую строку типа 'ABC123' во что-то похожее на '3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d' .

Я сначала попробовал это:

 >>> import base64 >>> q = 'ABC123' >>> w = base64.encodestring(q) >>> w 'QUJDMTIz\n' 

Но это коротко, мне нужно что-то дольше, чем я пробовал:

 >>> import hashlib >>> a = hashlib.sha224(q) >>> a.hexdigest() '3d3cf25845f3aae505bafbc1c8f16d0bfdea7d70f6b141c21726da8d' 

Это хорошо, но теперь я не знаю, как его вернуть. Если кто-то может помочь мне с этим примером или предложить что-то еще, как я могу кодировать / декодировать небольшую строку в нечто большее, было бы здорово.

ОБНОВИТЬ

основанный на ответе plockc я сделал это и, похоже, работает:

 from Crypto.Cipher import AES # encryption library BLOCK_SIZE = 32 # the character used for padding--with a block cipher such as AES, the value # you encrypt must be a multiple of BLOCK_SIZE in length. This character is # used to ensure that your value is always a multiple of BLOCK_SIZE PADDING = '{' # one-liner to sufficiently pad the text to be encrypted pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING # one-liners to encrypt/encode and decrypt/decode a string # encrypt with AES, encode with base64 EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING) # create a cipher object using the random secret cipher = AES.new('aaaaaaaaaa123456') # encode a string encoded = EncodeAES(cipher, 'ABC123') print 'Encrypted string: %s' % encoded # decode the encoded string decoded = DecodeAES(cipher, encoded) print 'Decrypted string: %s' % decoded 

    Вам, вероятно, нужно подробно остановиться на том, как вы собираетесь его использовать, и почему, поскольку вы только что открыли коробку Пандоры 🙂

    Кодирование является обратимым и должно использоваться только для того, чтобы данные вписывались в что-то другое (например, двоичные данные базы 64, когда вы можете использовать только текст), хеш (например, sha224) не должен быть обратимым.

    Если вы хотите проверить пользователя, вводящего пароль, вы его хэш (с помощью sha224) и сохраните хэш, а затем, когда пользователь снова вводит пароль, вы хешируете их запись и сравниваете. Это упрощенная версия, вам также нужно добавить «соль», чтобы избежать простой «атаки словаря». Я не буду подробно останавливаться на этом вопросе.

    Чтобы быстро ответить на ваш вопрос, вы хотите получить библиотеку шифрования, такую ​​как шифр AES-128, который имеет секретный ключ и ключом можно восстановить исходные данные. В библиотеке будет информация о том, как создать ключ (он должен быть определенной длины и будет обрабатываться, чтобы сделать его такой длиной). Если ваш ключ основан на простых паролях, посмотрите на PBKDF2, который делает сильный ключ шифрования слабым паролем.

    Не путайте hmac в качестве шифрования (hmac использует другую функцию, например, функцию хэширования sha224), если получатель сообщений делится клавишей hmac с отправителем, они могут «аутентифицировать», что сообщение может от отправителя, и оно пришло без изменений.

    Удачи!

    PS здесь хорошая книга, если вы действительно хотите начать копать в: Криптографическое проектирование: принципы проектирования и практические приложения

    Популярный ответ: https://stackoverflow.com/a/4948393/1322463

    В Википедии есть и хорошие статьи.