Вот вопрос:
В криптографии простой шифр замещения - это метод шифрования, при котором каждая буква фразы заменяется другой буквой или последовательностью букв. Затем фразу можно расшифровать, выполнив обратную подстановку.
В этом вопросе мы реализуем простой шифр подстановки, в котором символ (буква, число или специальный символ) заменяется двумя ди git число от 00 до 99 (включительно). Например, буква «а» может быть зашифрована, чтобы стать номером «06», или специальным символом «!» может стать числом «57».
Мы будем использовать словарь для хранения сопоставления между каждым символом и соответствующей зашифрованной формой. Таким образом, ключи словаря будут обычными символами (буквы, цифры и специальные символы), а значения будут зашифрованными формами символов (два числа git между 00
и 99
).
Ваш код должен реализовать следующие пять функций для этого вопроса.
Мы напишем еще две функции для повышения надежности нашего шифрования. Одна функция будет многократно шифровать строку несколько раз. Другая функция попытается расшифровать строку, не зная, сколько раз она была зашифрована (таким образом, победив точку более сильного шифрования).
Наконец, в конце файла encryption.py вы заметите некоторые код уже написан для вас. Этот код просит пользователя ввести строку, затем вызывает различные функции и печатает то, что они возвращают (чтобы получить примеры, показанные ниже). Вы должны изменить этот код так, чтобы, если пользователь вводит строку, которая не содержит ни одного слова из списка ОБЩИХ СЛОВ, программа должна вывести «Неверный ввод». и не выполнять остальную часть кода. В противном случае программа должна продолжить работу с остальной частью кода. (Подсказка. Вспомните Задание 1 и ветвления if / else.)
Вот что я попробовал в качестве ввода:
def reverse_lookup(d,v):
for key in d:
if d[key]==v:
return key
return None
LETTERS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()`~-=_+[]{}|;\':",./<>? '
def create_cypher_dictionary():
random.seed(1337)
cypher={}
ar=[0]*100
for c in LETTERS:
n=random.randrange(0, 100, 1)
while ar[n]!=0:
n=random.randrange(0, 100, 1)
ar[n]=1
if n<10:
cypher[c]=str('0')+str(n)
else:
cypher[c]=str(n)
return cypher
def encrypt(s):
cypher=create_cypher_dictionary()
new_s=''
for c in s:
new_s=new_s+cypher[c]
return new_s
def decrypt(s):
cypher=create_cypher_dictionary()
new_s=''
for i in range(len(s)-1):
c=s[i]+s[i+1]
for cc in cypher:
if cypher[cc]==c:
new_s=new_s+cc
return new_s
def encrypt_multiple_times(s,n):
for i in range(n):
s=encrypt(s)
return s
COMMON_WORDS= ['the','be','to','of','and','a','in','that','have','I','it','for','not','on','with','he','as','you','do','at']
def check_common_words(s):
for word in COMMON_WORDS:
if word in s:
return False
return True
def decrypt_multiple_times(s):
cypher=create_cypher_dictionary()
while check_common_words(s):
s=decrypt(s)
return s
s=input('Enter text to encrypt:')
if check_common_words(s)==False:
print("Encrypted string:", encrypt(s))
print("Decrypted string:", decrypt(encrypt(s)))
salted_s = encrypt_multiple_times(s, 2)
print("Encrypted x2 string:", salted_s)
print("Decrypted x2 string:", decrypt_multiple_times(salted_s))
else:
print('Invalid input.')
И вот результат, который он произвел:
Enter text to encrypt:The quick brown fox jumps over the lazy dog
Encrypted string: 36217337975199904937688489645037748985374251392613378908738437542173378179944437468993
Decrypted string: T0h-eK aq?u(iic,kg CbIr~o@wBn8 Jf~o>x[ fjLusm3p=sK Yocv<e/r" ?tjh-eK Yl-aizyy" fdboig
Encrypted x2 string: 9223712963929263666327296666666282669263230303820366238227629263638203660327926382712729926671232992926303666203639203829263278271296392926303296366668282829263822303666692
Decrypted x2 string: 36 21@7m313p7T997#5W1@9999990+4p9!3p7#6'8'8/4_8T906/45C013p7T7/4_8T9]8#5a3p7/4525W1i3p9N26#1i313p7'8T990_8T7m3_8/413p7#5Y4521@7m313p7'8#1@7T999b4+4+413p7/46'8T999!3
Однако предполагалось вывести:
Enter text to encrypt: The quick brown fox jumps over the lazy dog.
Encrypted string: 0766546138001892056159999714256163973761640073940161973354996169665461919809956156975155
Decrypted string: The quick brown fox jumps over the lazy dog.
Encrypted x2 string: 3417626247536227487834342778713634476227477171717117275336 4762276248711748176227625334341748715334276227711748484753717162276271626247536227712771783471714762274762711747274747
Decrypted x2 string: The quick brown fox jumps over the lazy dog.
У меня действительно нет идей, если кто-то может помочь, это будет очень признательно.