У меня возникла проблема с использованием шифрования строк. То, что я делаю, преобразует каждую букву в числа, используя функцию ord()
, а затем преобразует ее в двоичные коды. Который я затем инвертирую или xor числа, так что для буквы «A
», которая имеет двоичный код «0100 0001
», станет «1011 1110
», когда преобразованное обратно в десятичное значение будет 190
, которое я буду chr() обратно в письмо. Я заметил, что некоторые буквы не преобразуются в какие-либо символы, которые можно увидеть вообще. Когда я попытался преобразовать десятичное значение 157
в ASCII
персонаж. Я получил «\x9d
» вместо значения ASCII. Согласно расширенным кодам ASCII, он должен был дать мне символ, который я могу читать с функцией печати, а также печатать его в файле. Есть ли способ сделать Python печатать его в читаемом символе, чтобы я мог его распечатать? Прямо сейчас я не могу заставить его работать из-за неспособности программы распечатать его в символы, которые я могу прочитать и изменить процесс.шифрование строки с помощью двоичной манипуляции
ответ
Python по умолчанию показывает представление строк, если вы явно не печатаете их. \x9d
является repr
(представление) символа, если распечатать его, вы увидите что-то другое в зависимости от того, какой кодировки шрифта и ваш терминал использует
>>> chr(157)
'\x9d'
>>> print repr(chr(157)) # equivalent to the above
'\x9d'
>>> print chr(157)
� # this appears as a question mark in a diamond shaped box on my system
Это не остановит вас от записи данных в файл, хотя ,
EDIT
Если на «Расширенная ASCII» вы имеете в виду на этот набор символов http://en.wikipedia.org/wiki/Code_page_437, вы должны быть в состоянии использовать
>>> print chr(157).decode('CP437')
¥
Это возвращает юникод строку, подходящую для печати (если ваш терминал поддерживает это).
EDIT 2
Это немного отличается в Python 3.x, как ord
возвращает юникод ул. Вместо этого вы хотите bytes
ули (что эквивалентно ул Python2.x):
>>> bytes([157]) # this is equivalent to ord(157) in Python 2.x
b'\x9d'
>>> bytes([157]).decode('cp437') # decode this to a unicode str with the desired encoding
'¥'
>>> print(bytes([157]).decode('cp437')) # now it's suitable for printing
¥
Убедитесь, что при записи данных в файл, который вы пишете необработанный bytes
ул, не юникод (версия для печати) ул :
>>> data = bytes([154, 155, 156, 157])
>>> print (data.decode('cp437')) # use decode for printing
Ü¢£¥
>>> with open('output.dat', 'wb') as f:
... f.write(data) # but not for writing to a file
...
4
>>> with open('output.dat', 'rb') as f:
... data = f.read()
... print(data)
... print(data.decode('cp437'))
...
b'\x9a\x9b\x9c\x9d'
Ü¢£¥
- 1. Шифрование потока двоичной сериализации .NET
- 2. Шифрование строки с bash
- 3. Строки манипуляции
- 4. Шифрование и расшифровка строки с помощью ChaCha20
- 5. Шифрование Python - шифрование строки
- 6. строки и массивы манипуляции с #
- 7. string.replace возвращение двоичной строки
- 8. Разбиение двоичной строки пополам
- 9. Остаток двоичной строки 3
- 10. Проверьте длину двоичной строки?
- 11. Шифрование строки с использованием PCLCrypto
- 12. Строки и шифрование и шифрование
- 13. Строка Python для двоичной строки
- 14. преобразование из двоичной строки в int с помощью strtoll?
- 15. Воспроизведение двоичной строки с помощью HTML-тега HTML
- 16. Как создать файл из двоичной строки с помощью javascript
- 17. dplyr подобные манипуляции строки
- 18. Шифрование строки
- 19. Шифрование строки
- 20. Строки разделения манипуляции строками
- 21. XAML-сериализация свойств двоичной строки
- 22. C++ реверсирование манипуляции строки
- 23. C# строки манипуляции
- 24. JavaScript строки манипуляции
- 25. манипуляции строки в выводе
- 26. манипуляции данными с помощью сценария
- 27. побитовое манипуляции с помощью оператора []
- 28. Шифрование файлов с помощью openssl_encrypt
- 29. парное сравнение двоичной матрицы с помощью vba
- 30. Шифрование параметра с помощью openssl
Я просто попытался его в питон IDLE Shell и он сказал "SyntaxError: неверный синтаксис", я затем попытался с помощью печати (___) (___ будучи CHR (157) .decode ('CP437') , он также не работал. Он сказал, что объект AttributeError: 'str' не имеет никакого атрибута 'decode', и я попытался сделать это без печати. Такая же проблема. str не имеет декодирования. Я использую Python IDLE 3.3. 2, я знаю, что он отличается аренду с 2.x python. Какие-либо предложения? Я использовал как dir, так и help, в chr() не было декодирования или кодирования. – user3444888
@ user3444888 Я обновил ответ с кодом для Python 3.x –
Спасибо! Это сработало! Есть ли способ отменить его? Когда я попытался использовать ord(), он дал 165, но начальное значение было 157. – user3444888