проблемы дешифрования + base64 в python с использованием AWS - PullRequest
0 голосов
/ 15 января 2019

У меня есть таблица client_info в базе данных PostgreSQL, в которой есть 1 поле (адрес), в котором я хочу сохранить зашифрованное значение. Но когда я хочу отправить поле как результат API, я хочу расшифровать его и отправить дешифрованный адрес.

Ниже приведены мои зашифрованные и расшифрованные функции (я также делаю кодирование / декодирование base64 вместе с шифрованием / дешифрованием соответственно)

PADDING = lambda s: s + (32 - len(s) % 32) * ' '

    def encrypt_info(str):
        try:
            encrypted_info = b64encode(obj.encrypt(settings.PADDING(str)))
            return encrypted_info
        except Exception as e:
            print("Error in encryption: %s", e.message)
            return str


    def decrypt_info(str):
        try:
            decrypted_info = obj.decrypt(b64decode(str)).rstrip()
            return decrypted_info
        except Exception as e:
            print("Error in decryption: %s", e.message)
            return str

где obj - объект AES, использующий ключ. (Не может поделиться им по соображениям безопасности).

На данный момент шифрование работает нормально, и каждый раз, когда вставляется новая строка, поле адреса шифруется и сохраняется в базе данных.

Проблема, с которой я сталкиваюсь:

  1. Для адресов, которые зашифрованы, decrypt_info дает мне правильные результаты.
  2. Для адресов, которые не зашифрованы ( старые адреса, которые уже есть в базе данных), исключение выдается в некоторых случаях, но в некоторых случаях decrypt_info () не выдает никаких исключений, и я получаю какой-то хлам вроде ƭ H e̪Cs8Lq ڎ ~ Sp .

Я хочу, чтобы функция работала во всех случаях. Можете ли вы помочь мне в этом? Я нашел некоторые функции, чтобы проверить, закодирована ли строка в base64 или нет, а затем выполнить операцию, но это работает не во всех случаях.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 15 января 2019

Не существует надежного способа определить, является ли строка «сырой» или является результатом шифрования AES.

Если вы хотите сохранить обратную совместимость, вам нужно записать некоторый флаг в БД вместе с сообщениями, чтобы различать новые / старые данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...