Как в Python перевести string в bytes, не меняя string?
Нужно сохранять список паролей в БД в зашифрованом виде, используется библиотека scrypt. Пароли она шифрует в байтах, то есть выглядит пароль примерно так: b"scrypt\x00\x11\x00\x00\x00\x08\x00\x.... Но в базу этот пароль записывается как строка, а для расшифровки нужны именно байты. Как перевести строку подобного вида в байти, сохранив её структуру?
Если вы хотите сохранить в БД бинарные данные. то у вас есть три варианта:
1) Хранить в БД данные в поле типа binary blob. В таком поле может храниться произвольный набор байтов, он не птается преобраховаться в строку при работе.
2) Хранить в БД экранированную строку в поле обычного строкового типа. При этом все непечатные и спец-символы должны быть экранированны специальной последовательностью, которая состоит из печатных обычных символов. Тогда нужно перед испольованием полученных из БД данных разэкранировать строку и получить байты.
3) Можно хранить данные в БД в обычном текстовом или текстовом blob-поле, но в виде закодированно последовательности base16 или base64. В base64 каждые два байта кодируются тремя символами из 64-битного набора печатных символов. Нужно кодировать и декодировать такие строки при сохранении\загрузке.
Вам больше всего подходит base64. Посмотрите в документации как с этим работать
wincrx, постарайтесь, всё же, не хранить пароли в БД, даже в зашифрованном виде.
Если вам пароли для авторизации, то их нужно хранить в захешированном виде, причем с солью. Прочитайте про правильное хеширование паролей.
Хранить зашифрованные пароли не намного безопаснее хранения их в открытом виде.
Если утекла БД, то не мудрено и ключу шифрования утечь.
Если утечет БД с хешами паролей, товосстановить по ним сами пароли будет невозможно. особенно если пароли просолены перед хешированием.
Люди часто используют одни и те же пароли для разных сервисов, и вашему сервису уже терять нечего при утечке, но пользователей надо оберегать, даже тех, кто не испольует уникальные пароли.
Сергей Паньков, я делаю для себя менеджер паролей на телефон через Python + Kivy. Так как такое приложение будет максимум на 2-3 телефонах в мире, вряд ли кто-то захочет украсть мою БД). По этой причине я, наверное, даже в открытом виде мог бы пароли хранить, но все таки пусть хоть какая-то защита будет
wincrx, ну да, менеджер паролей - это, пожалуй, единственное вынужденное исключение. И то я бы шифровал так. чтобы в БД не было достаточно инфы для расшифровки, и часть ключа хранилась исключительно на клиенте.