# Шифрование текста с помощью сдвига Цезаря
strOfChar = "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ' . , : ; # № : $ = - + * /"
listOfChar = strOfChar.lower ( ) .split ( " " )
text = "This post tells in simple language about the essence of Caesar's encryption. Physics.Math.Code.Books is the best group for physicists, mathematicians and developers in VK"
""" Метод, шифрующий слово """
def encryptedWord( word, k) :
wordEncrypted = ''
for ch in word:
if ( ch.isupper ( ) ) :
indexOfChar = ( listOfChar.index ( ch.lower ( ) ) - k) % len ( listOfChar)
wordEncrypted += listOfChar[ indexOfChar] .upper ( )
else :
indexOfChar = ( listOfChar.index ( ch) - k) % len ( listOfChar)
wordEncrypted += listOfChar[ indexOfChar]
return wordEncrypted
""" Метод, дешифрующий слово """
def decryptedWord( word, k) :
wordDecrypted = ''
for ch in word:
if ( ch.isupper ( ) ) :
indexOfChar = ( listOfChar.index ( ch.lower ( ) ) + k) % len ( listOfChar)
wordDecrypted += listOfChar[ indexOfChar] .upper ( )
else :
indexOfChar = ( listOfChar.index ( ch) + k) % len ( listOfChar)
wordDecrypted += listOfChar[ indexOfChar]
return wordDecrypted
""" Метод, шифрующий текст в виде строки """
def encryptedText( string , k) :
encryptStr = ''
for word in string .split ( " " ) :
encryptStr += encryptedWord( word, k) + " "
return encryptStr[ :-1 ]
""" Метод, дешифрующий текст в виде строки """
def decryptedText( string , k) :
decryptStr = ''
for word in string .split ( " " ) :
decryptStr += decryptedWord( word, k) + " "
return decryptStr[ :-1 ]
print ( "Исходные текст: " , text)
k = 1 #Ключ шифрования
print ( "Зашифрованный текст: " , encryptedText( text, k) )
print ( "Расшифрованный текст: " , decryptedText( encryptedText( text, k) , k) )
IyDQqNC40YTRgNC+0LLQsNC90LjQtSDRgtC10LrRgdGC0LAg0YEg0L/QvtC80L7RidGM0Y4g0YHQtNCy0LjQs9CwINCm0LXQt9Cw0YDRjwoKc3RyT2ZDaGFyID0gIkEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiAnIC4gLCA6IDsgIyDihJYgOiAkID0gLSArICogLyIKbGlzdE9mQ2hhciA9IHN0ck9mQ2hhci5sb3dlcigpLnNwbGl0KCIgIikKCnRleHQgPSAiVGhpcyBwb3N0IHRlbGxzIGluIHNpbXBsZSBsYW5ndWFnZSBhYm91dCB0aGUgZXNzZW5jZSBvZiBDYWVzYXIncyBlbmNyeXB0aW9uLiBQaHlzaWNzLk1hdGguQ29kZS5Cb29rcyBpcyB0aGUgYmVzdCBncm91cCBmb3IgcGh5c2ljaXN0cywgbWF0aGVtYXRpY2lhbnMgYW5kIGRldmVsb3BlcnMgaW4gVksiCgoiIiIg0JzQtdGC0L7QtCwg0YjQuNGE0YDRg9GO0YnQuNC5INGB0LvQvtCy0L4gIiIiIApkZWYgZW5jcnlwdGVkV29yZCh3b3JkLCBrKToKICAgIHdvcmRFbmNyeXB0ZWQgPSAnJwogICAgZm9yIGNoIGluIHdvcmQ6CiAgICAgICAgaWYoY2guaXN1cHBlcigpKToKICAgICAgICAgICAgaW5kZXhPZkNoYXIgPSAobGlzdE9mQ2hhci5pbmRleChjaC5sb3dlcigpKSAtIGspICUgbGVuKGxpc3RPZkNoYXIpCiAgICAgICAgICAgIHdvcmRFbmNyeXB0ZWQgKz0gbGlzdE9mQ2hhcltpbmRleE9mQ2hhcl0udXBwZXIoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGluZGV4T2ZDaGFyID0gKGxpc3RPZkNoYXIuaW5kZXgoY2gpIC0gaykgJSBsZW4obGlzdE9mQ2hhcikKICAgICAgICAgICAgd29yZEVuY3J5cHRlZCArPSBsaXN0T2ZDaGFyW2luZGV4T2ZDaGFyXSAgICAgIAogICAgcmV0dXJuIHdvcmRFbmNyeXB0ZWQKIAoiIiIg0JzQtdGC0L7QtCwg0LTQtdGI0LjRhNGA0YPRjtGJ0LjQuSDRgdC70L7QstC+ICIiIiAKZGVmIGRlY3J5cHRlZFdvcmQod29yZCwgayk6CiAgICB3b3JkRGVjcnlwdGVkID0gJycKICAgIGZvciBjaCBpbiB3b3JkOgogICAgICAgIGlmKGNoLmlzdXBwZXIoKSk6CiAgICAgICAgICAgIGluZGV4T2ZDaGFyID0gKGxpc3RPZkNoYXIuaW5kZXgoY2gubG93ZXIoKSkgKyBrKSAlIGxlbihsaXN0T2ZDaGFyKQogICAgICAgICAgICB3b3JkRGVjcnlwdGVkICs9IGxpc3RPZkNoYXJbaW5kZXhPZkNoYXJdLnVwcGVyKCkKICAgICAgICBlbHNlOgogICAgICAgICAgICBpbmRleE9mQ2hhciA9IChsaXN0T2ZDaGFyLmluZGV4KGNoKSArIGspICUgbGVuKGxpc3RPZkNoYXIpCiAgICAgICAgICAgIHdvcmREZWNyeXB0ZWQgKz0gbGlzdE9mQ2hhcltpbmRleE9mQ2hhcl0gICAgCiAgICByZXR1cm4gd29yZERlY3J5cHRlZAoKCgoiIiIg0JzQtdGC0L7QtCwg0YjQuNGE0YDRg9GO0YnQuNC5INGC0LXQutGB0YIg0LIg0LLQuNC00LUg0YHRgtGA0L7QutC4ICIiIgpkZWYgZW5jcnlwdGVkVGV4dChzdHJpbmcsIGspOgogICAgZW5jcnlwdFN0ciA9ICcnCiAgICBmb3Igd29yZCBpbiBzdHJpbmcuc3BsaXQoIiAiKToKICAgICAgICBlbmNyeXB0U3RyICs9IGVuY3J5cHRlZFdvcmQod29yZCwgaykgKyAiICIgICAKICAgIHJldHVybiAgZW5jcnlwdFN0cls6LTFdICAgICAgIAoKIiIiINCc0LXRgtC+0LQsINC00LXRiNC40YTRgNGD0Y7RidC40Lkg0YLQtdC60YHRgiDQsiDQstC40LTQtSDRgdGC0YDQvtC60LggIiIiCmRlZiBkZWNyeXB0ZWRUZXh0KHN0cmluZywgayk6CiAgICBkZWNyeXB0U3RyID0gJycKICAgIGZvciB3b3JkIGluIHN0cmluZy5zcGxpdCgiICIpOgogICAgICAgIGRlY3J5cHRTdHIgKz0gZGVjcnlwdGVkV29yZCh3b3JkLCBrKSArICIgIiAKICAgIHJldHVybiAgZGVjcnlwdFN0cls6LTFdICAgICAKICAgIAoKcHJpbnQoItCY0YHRhdC+0LTQvdGL0LUg0YLQtdC60YHRgjogIiwgdGV4dCkKayA9IDEgI9Ca0LvRjtGHINGI0LjRhNGA0L7QstCw0L3QuNGPCnByaW50KCLQl9Cw0YjQuNGE0YDQvtCy0LDQvdC90YvQuSDRgtC10LrRgdGCOiAiLCBlbmNyeXB0ZWRUZXh0KHRleHQsIGspKQpwcmludCgi0KDQsNGB0YjQuNGE0YDQvtCy0LDQvdC90YvQuSDRgtC10LrRgdGCOiAiLCBkZWNyeXB0ZWRUZXh0KGVuY3J5cHRlZFRleHQodGV4dCwgayksIGspKQ==