Я пытаюсь зашифровать некоторый открытый текст с помощью определенного метода. Учитывая ключ [4,5,6,7] и открытый текст «Это некоторый открытый текст» Первая буква - это первый номер в ключе 4, поэтому T становится X, двигаясь вперед 4 (T, U, V, W, X) Далее буква H является 5, поэтому H становится M (H, I, J, K, L, M}Как выбрать значение из массива (см. Описание для дополнительной информации)
Когда конец ключа достигнут, просто начинайте с начала и продолжайте шифрование до завершения. У меня есть основной контур в Python:
#key = [4,5,12,6,7,11,8,9,1,2,3,10]
key = [4,5,6,7]
letters = ["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"]
plaintext = "IfyouarereadingthisthenthisplanetmayhavehopeafterallYouhavethepowerand"
plaintext = plaintext.upper()
keySpot = 0
count = 0;
keyCount = 0
letterLocation = 0
tempLetter = ""
i = 0
while(count < len(plaintext)):
tempLetter = plaintext[count]
for i in range(0, len(letters)):
if(tempLetter == letters[i]):
letterLocation = i
i = i + 1
if(keyCount > 4):
keyCount = 0
letterLocation = letterLocation + key[keyCount]
keyCount = keyCount + 1
if(letterLocation > 27):
#need some logic here so it wont go out of bounds
print letters[letterLocation]
count = count + 1
Моя главная проблема в том, что делать, если letterLocation слишком большой при движении вперед и получает мимо Z. Когда он попадает в Z мне это нужно, чтобы начать все сначала в точке А и держать идя до конца. Например, если буквой открытого текста было Y, а ключ был равен 5 Y, то D (Y, Z, A, B, C, D}
Как это сделать? Любая помощь будет высоко оценена, она может быть в Java, C, C++, JavaScript или Python, что проще всего. Если вы придумаете лучший метод, я советую. Благодаря!
Для начинающих, есть оператор в математике называется по модулю: https://en.wikipedia.org/wiki/Modulo_operation –