У меня есть таблица 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, использующий ключ. (Не может поделиться им по соображениям безопасности).
На данный момент шифрование работает нормально, и каждый раз, когда вставляется новая строка, поле адреса шифруется и сохраняется в базе данных.
Проблема, с которой я сталкиваюсь:
- Для адресов, которые зашифрованы, decrypt_info дает мне
правильные результаты.
- Для адресов, которые не зашифрованы (
старые адреса, которые уже есть в базе данных), исключение выдается в некоторых случаях, но в некоторых
случаях decrypt_info () не выдает никаких исключений, и я получаю
какой-то хлам вроде ƭ H e̪Cs8Lq ڎ ~ Sp .
Я хочу, чтобы функция работала во всех случаях. Можете ли вы помочь мне в этом?
Я нашел некоторые функции, чтобы проверить, закодирована ли строка в base64 или нет, а затем выполнить операцию, но это работает не во всех случаях.
Любая помощь будет принята с благодарностью.