Статья Шифр цезаря

Мне встретилась задача с зашифрованым сообщением "шифром Цезаря"
Нашел хороший пример кодирования и декодирования:

Код:
L2I = dict(zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ",range(26)))
I2L = dict(zip(range(26),"ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

key = 3
plaintext = "DEFEND THE EAST WALL OF THE CASTLE"
Код:
# encipher
ciphertext = ""
for c in plaintext.upper():
if c.isalpha(): ciphertext += I2L[ (L2I[c] + key)%26 ]
else: ciphertext += c

# decipher
plaintext2 = ""
for c in ciphertext.upper():
if c.isalpha(): plaintext2 += I2L[ (L2I[c] - key)%26 ]
else: plaintext2 += c

print(plaintext)
print(ciphertext)
print(plaintext2)

(С)
 

hlop

One Level
13.01.2017
9
10
BIT
1
Мне встретилась задача с зашифрованым сообщением "шифром Цезаря"
Нашел хороший пример кодирования и декодирования:

Код:
L2I = dict(zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ",range(26)))
I2L = dict(zip(range(26),"ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

key = 3
plaintext = "DEFEND THE EAST WALL OF THE CASTLE"
Код:
# encipher
ciphertext = ""
for c in plaintext.upper():
if c.isalpha(): ciphertext += I2L[ (L2I[c] + key)%26 ]
else: ciphertext += c

# decipher
plaintext2 = ""
for c in ciphertext.upper():
if c.isalpha(): plaintext2 += I2L[ (L2I[c] - key)%26 ]
else: plaintext2 += c

print(plaintext)
print(ciphertext)
print(plaintext2)

(С)

Разве не лучше использовать ord и chr ?

Python:
def code(string, key=3):
    return ''.join([chr(ord(i)+key) for i in string])
    
def decode(string, key=3):
    return ''.join([chr(ord(i)-key) for i in string])
 
  • Нравится
Реакции: Ванек

explorer

Platinum
05.08.2018
1 080
2 475
BIT
0
Я .... немного ничего не понял.
почитай


Мне встретилась задача с зашифрованым сообщением "шифром Цезаря"
Нашел хороший пример кодирования и декодирования:
В приведённом коде ошибки - отсутствуют отступы перед if

Правильный код таким будет:


Python:
L2I = dict(zip("ABCDEFGHIJKLMNOPQRSTUVWXYZ",range(26)))
I2L = dict(zip(range(26),"ABCDEFGHIJKLMNOPQRSTUVWXYZ"))

key = 3
plaintext = "DEFEND THE EAST WALL OF THE CASTLE"

# encipher
ciphertext = ""
for c in plaintext.upper():
    if c.isalpha(): ciphertext += I2L[ (L2I[c] + key)%26 ]
    else: ciphertext += c

# decipher
plaintext2 = ""
for c in ciphertext.upper():
    if c.isalpha(): plaintext2 += I2L[ (L2I[c] - key)%26 ]
    else: plaintext2 += c

print(plaintext)
print(ciphertext)
print(plaintext2)
 
Последнее редактирование:
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!