Сегодня речь пойдёт о шифровании. Если есть необходимость сохранить конфиденциальность информации в текстовых документах даже при их утечке в лапы кулцхакеров, то лучшим выходом будет шифровка.
В сети есть множество программ для этого дела, да вот беда – всё что шифруется, так же замечательно и дешифруется, ведь инструменты то в паблике. Конечно понадобятся какие-то усилия на поиск подходящей тулзы, но это не займёт слишком долго по времени.
Самый верный выход – это написать свой собственный encoder с уникальным кодом, не похожим на другие.
Приступим:
Сначала накидаем обычного Цезаря, но мы ведь русские, а значит нам понадобятся как латиница, так и кириллица. Буквы большие и маленькие -
Но это слишком просто, ничего уникального. А теперь мы «посолим» наш алфавит, разбавив его спецсимволами и знаками препинания, включая пробел.
Вот так-то по-нашенски, по БРОзильски! )
К энкодеру конечно понадобится и декодер, иначе шифровка не имеет смысла
Запускаем, и вот что получилось:
Уже мне нравится, взрыв мозга в расшифровке обеспечен. Но не будем на этом останавливаться, запутаем врага ещё больше – сделаем вывод задом наперёд. Для этого переделаем принт таким образом:
print(encoder[: :-1])
Результат:
И тут Остапа понесло… ))) А ещё круче??? Сказано – сделано.
Сначала напишем небольшую тулзу с рандомным перемешиванием символов, и забабахаем туда наш список.
Запустим несколько раз…. Я-ху!!!
Выберем вариант более приятный глазу и … прогоним наши входные данные по второму кругу )))
Как можно заметить кроме того, что мы использовали солёно-миксованный алфавит и 2 раза к тому же зазеркалили вывод, во второй заход использовался другой сдвиг. Соответственно при расшифровке нужно вводить сдвиг в обратном порядке.
А теперь, зная идею, вы можете модифицировать данный код, делая рандомные списки, и прогоняя хоть кучу раз через прогу.
Ну вот и всё, горе тому ЦРУ-шнику, которому пришлось бы возиться с такой рашифровкой, проще застрелиться! )))
А впрочем в ЦРУ и другая работа есть )
Итоговый исходный код
В сети есть множество программ для этого дела, да вот беда – всё что шифруется, так же замечательно и дешифруется, ведь инструменты то в паблике. Конечно понадобятся какие-то усилия на поиск подходящей тулзы, но это не займёт слишком долго по времени.
Самый верный выход – это написать свой собственный encoder с уникальным кодом, не похожим на другие.
Приступим:
Сначала накидаем обычного Цезаря, но мы ведь русские, а значит нам понадобятся как латиница, так и кириллица. Буквы большие и маленькие -
Python:
# -*- coding:utf -8 -*-
# !/usr/bin/python3
# encoder
list_encoder = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщыьъэюяABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
n = int(input('Введите число: '+'\n'))
s = input('Введите текст: '+'\n')
encoder = ''
for c in s:
encoder += list_encoder[(list_encoder.index(c) + n) % len(list_encoder)]
print(encoder)
Но это слишком просто, ничего уникального. А теперь мы «посолим» наш алфавит, разбавив его спецсимволами и знаками препинания, включая пробел.
Python:
list_encoder = 'А.БВ,ГД:ЕЁ;ЖЗ[ИЙ]КЛ{МН}ОП"РС<ТУ>ФХ?ЦЧ№ШЩЫЬЪЭЮЯа`бв~гд1её!жз2ий@к л3мн#оп4рс$ту5фх%цч6шщ^ыьъ7эю&яABCDEFGHIJKLMNOPQRSTUVWXYZa8bc*de9fg(hi0jk)lm-no_pq=rs+tuv\w|xy/z'
Вот так-то по-нашенски, по БРОзильски! )
К энкодеру конечно понадобится и декодер, иначе шифровка не имеет смысла
Python:
# decoder
list_decoder = 'А.БВ,ГД:ЕЁ;ЖЗ[ИЙ]КЛ{МН}ОП"РС<ТУ>ФХ?ЦЧ№ШЩЫЬЪЭЮЯа`бв~гд1её!жз2ий@к л3мн#оп4рс$ту5фх%цч6шщ^ыьъ7эю&яABCDEFGHIJKLMNOPQRSTUVWXYZa8bc*de9fg(hi0jk)lm-no_pq=rs+tuv\w|xy/z'
e = int(input('Введите число: '+'\n'))
x = input('Введите текст: '+'\n')
decoder = ''
for c in x:
decoder += list_decoder[(list_decoder.index(c) - e) % len(list_decoder)]
print(decoder)
Запускаем, и вот что получилось:
Уже мне нравится, взрыв мозга в расшифровке обеспечен. Но не будем на этом останавливаться, запутаем врага ещё больше – сделаем вывод задом наперёд. Для этого переделаем принт таким образом:
print(encoder[: :-1])
Результат:
И тут Остапа понесло… ))) А ещё круче??? Сказано – сделано.
Сначала напишем небольшую тулзу с рандомным перемешиванием символов, и забабахаем туда наш список.
Python:
import random
s='А.БВ,ГД:ЕЁ;ЖЗ[ИЙ]КЛ{МН}ОП"РС<ТУ>ФХ?ЦЧ№ШЩЫЬЪЭЮЯа`бв~гд1её!жз2ий@к л3мн#оп4рс$ту5фх%цч6шщ^ыьъ7эю&яABCDEFGHIJKLMNOPQRSTUVWXYZa8bc*de9fg(hi0jk)lm-no_pq=rs+tuv\w|xy/z'
x =''.join(random.sample(s,len(s)))
print(x)
Запустим несколько раз…. Я-ху!!!
Выберем вариант более приятный глазу и … прогоним наши входные данные по второму кругу )))
Как можно заметить кроме того, что мы использовали солёно-миксованный алфавит и 2 раза к тому же зазеркалили вывод, во второй заход использовался другой сдвиг. Соответственно при расшифровке нужно вводить сдвиг в обратном порядке.
А теперь, зная идею, вы можете модифицировать данный код, делая рандомные списки, и прогоняя хоть кучу раз через прогу.
Ну вот и всё, горе тому ЦРУ-шнику, которому пришлось бы возиться с такой рашифровкой, проще застрелиться! )))
А впрочем в ЦРУ и другая работа есть )
Итоговый исходный код
Python:
# -*- coding:utf -8 -*-
# !/usr/bin/python3
# encoder
list_encoder = 'А.БВ,ГД:ЕЁ;ЖЗ[ИЙ]КЛ{МН}ОП"РС<ТУ>ФХ?ЦЧ№ШЩЫЬЪЭЮЯа`бв~гд1её!жз2ий@к л3мн#оп4рс$ту5фх%цч6шщ^ыьъ7эю&яABCDEFGHIJKLMNOPQRSTUVWXYZa8bc*de9fg(hi0jk)lm-no_pq=rs+tuv\w|xy/z'
n = int(input('Введите число: '+'\n'))
s = input('Введите текст: '+'\n')
encoder = ''
for c in s:
encoder += list_encoder[(list_encoder.index(c) + n) % len(list_encoder)]
print(encoder[: :-1])
# encoder2
list_encoder2 = '%Ёеуъ? 2v#;<\9}иЧRЯfA№e4УАЖn|=ёюя`ИLBНМ_ЪC0~ZwIHбпrcbdqдgзВ"$Dэlхй,С-XF{Os(:БTжГ6zшЬJьkрpKEШЮХ]uGнЩ[YДQРт)W5N8U.7фxФ/ЛV!чiS1tЕТ3мjоЗmг^aвЭщPцскКПО&hMыа@yлЙoЦ+>*Ы'
n = int(input('Введите число: '+'\n'))
s = input('Введите текст: '+'\n')
encoder2 = ''
for c in s:
encoder2 += list_encoder2[(list_encoder2.index(c) + n) % len(list_encoder2)]
print(encoder2[: :-1])
# decoder
list_decoder = '%Ёеуъ? 2v#;<\9}иЧRЯfA№e4УАЖn|=ёюя`ИLBНМ_ЪC0~ZwIHбпrcbdqдgзВ"$Dэlхй,С-XF{Os(:БTжГ6zшЬJьkрpKEШЮХ]uGнЩ[YДQРт)W5N8U.7фxФ/ЛV!чiS1tЕТ3мjоЗmг^aвЭщPцскКПО&hMыа@yлЙoЦ+>*Ы'
e = int(input('Введите число: '+'\n'))
x = input('Введите текст: '+'\n')
decoder = ''
for c in x:
decoder += list_decoder[(list_decoder.index(c) - e) % len(list_decoder)]
print(decoder[: :-1])
# decoder2
list_decoder2 = 'А.БВ,ГД:ЕЁ;ЖЗ[ИЙ]КЛ{МН}ОП"РС<ТУ>ФХ?ЦЧ№ШЩЫЬЪЭЮЯа`бв~гд1её!жз2ий@к л3мн#оп4рс$ту5фх%цч6шщ^ыьъ7эю&яABCDEFGHIJKLMNOPQRSTUVWXYZa8bc*de9fg(hi0jk)lm-no_pq=rs+tuv\w|xy/z'
e = int(input('Введите число: '+'\n'))
x = input('Введите текст: '+'\n')
decoder2 = ''
for c in x:
decoder2 += list_decoder2[(list_decoder2.index(c) - e) % len(list_decoder2)]
print(decoder2[: :-1])