Выбор кодировки python и конвертирование последовательности бит в строку?
Задача шифрование/дешифрование текста
Исходный текст asdasdasdf
бинарное представление 01100001011100110110010001100001011100110110010001100001011100110110010001100110
зашифрованный текст
11011100000101000001010110111010110000010000010101001111010100010011011011111101
представление в байтах
0xdc1415bac1054f5136fd
Вопрос, как из зашифрованного текста получить обычный текст(какие либо кракозябры), чтобы его можно было привести обратно к виду представления в байтах?
что-то типа кодировки в которой все 256 чисел отвечали за свой символ или как выводить недопустимые символы
Microp: увеличение длинны на 33% зато имеем стандартное кодирование которое пролезает в любой канал передачи данных, и гарантирует 100% восстановление данных.
Ни одна кодировка не поддерживает печатаемые символы для всех 256 возможных в байте кодов. Там есть банально управляющие коды.
Кроме того в той же почте (исторически) передаются коды только диапазона 0-127 (часть из них управляющие) т.е. вообще 7 бит. Все символы что не влезают (в т.ч. и русские) автоматически кодируются в base64.
На самом деле base64 используется практически везде, где нужно бинарные данные передать текстовым сообщением. И не смотря на то что стандарту уже почти 30 лет от роду - он по сей день актуален т.к. никто ничего лучше не придумал.
Вот и вам советую - не изобретайте велосипед, пользуйтесь стандартными решениями.
... вы можете представить кодированное сообщение в виде текста только если ваш алгоритм для каждого байта (8бит) гарантирует, что значение будет в диапазоне 32-255. Символы с кодами меньше 32 использовать нельзя - там управляющие символы, которые при печати будет либо одинаковым символом отображаться либо влиять на последовательность вывода (первод строки, возврат каретки, табуляция и т.п.)
С кодами 128-255 - тоже могут быть сложности т.к. во многих кодировках даже в этом диапазоне есть "дырки" которые либо вызовут ошибку при кодировании, либо будут заменены на один и тот же символ заменитель.
Но нужно помнить, что сильно хитрый алгоритм шифрования - это что-то написанное на коленке с криптостойкостью близкой к нулю.
Так что еще раз повторю - велосипед изобретать ненужно - ваша задача решается через base64 кодирование.
Представление больше походит на хэшь. А в питоне у класса строк есть функции u"blabla".decode("UTF-8").encode("CP866")
Работают они по стандартным кодовым таблицам, если у вас какая то нестандартная кодировка - то придется ручками писать таблицу, а может и сами функции. Если это хэшь - то декодировать не получится.
Простые преобразования кодировок могут приводить к искажению информации и не всегда сработают без ошибок, из за того что не все символы из 256 возможных определены.
Для кодирования в каналах передачи вообще стоит отказаться от любых непечатных символов.
Поэтому была придумана кодировка BASE64 - там только печатаемые символы используются, но каждый символ кодирует только 6 бит.