Правильно зашифровать с помощью Base64
Если зашифровать PGh0bWw+DQo8aGVhZD4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAueWlp и PGh0bWw+CjxoZWFkPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAueWlp то получится одинаковый результат
<html>
<head>
<style type="text/css">
.yii
А если расшифровать этот текст, то получится PGh0bWw+CjxoZWFkPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAueWlp, а не PGh0bWw+DQo8aGVhZD4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAueWlp. Почему так?
Ответы (2 шт):
В этих двух примерах различаются переводы строки. В первом - \r\n (новая строка в стиле Windows), во втором - \n (новая строка в стиле Unix):
$ python
Python 3.10.0 (default, Oct 16 2021, 12:17:56) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
@>>> import base64
@>>> base64.b64decode("PGh0bWw+DQo8aGVhZD4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAueWlp")
b'<html>\r\n<head>\r\n <style type="text/css">\r\n .yii'
@>>> base64.b64decode("PGh0bWw+CjxoZWFkPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAueWlp")
b'<html>\n<head>\n <style type="text/css">\n .yii'
Не удивительно что вы не видите разницы в обычном редакторе или в консоли.
в linux среде можно посмотреть так:
$ echo "PGh0bWw+DQo8aGVhZD4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAueWlp" | base64 --decode | cat --show-ends
<html>^M$
<head>^M$
<style type="text/css">^M$
.yii
и
$ echo "PGh0bWw+CjxoZWFkPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgICAueWlp" | base64 --decode | cat --show-ends
<html>$
<head>$
<style type="text/css">$
.yii
где cat --show-ends сделает для нас видимым символ перевода строки.
В первом варианте это ^M$(\r\n) а во втором $(\n)
Подобное отображение перевода строки говорит о том что данный кусок кода скорее всего был преобразован в base64 на разных системах - Windows и Linux соответственно.
Чтобы избежать подобных проблем при переносе документов с одной платформы на другую в linux есть специальный инструмент dos2unix который преобразует документ и установит необходимые окончания строк, из примера выше:
$ echo "PGh0bWw+DQo8aGVhZD4NCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgICAueWlp" | base64 --decode | dos2unix | cat --show-ends
<html>$
<head>$
<style type="text/css">$
.yii
утилиты dos2unix и unix2dos преобразуют документ в направлении соответствующем их названию. Также есть еще unix2mac и mac2unix с аналогичной функцией преобразования для Linux и Mac
п.с.
Возможно нужно будет доустановить пакет dos2unix который содержит в себе все вышеперечисленные утилиты для преобразования.