【发布时间】:2014-09-07 04:56:40
【问题描述】:
我正在尝试使用特定方法加密一些明文。给定一个密钥 [4,5,6,7] 和明文“这是一些明文” 第一个字母是 T 密钥中的第一个数字是 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 时,我需要它从 A 处重新开始并继续前进直到完成。例如,如果明文字母为 Y,密钥为 5,Y 将变为 D {Y, Z, A, B, C, D}
我该怎么做?它可以是 Java、C、C++、JavaScript 或 Python,只要是最简单的。如果你能想出更好的方法,我会采纳建议的。
【问题讨论】:
-
对于初学者来说,数学中有一个叫做取模的运算符:en.wikipedia.org/wiki/Modulo_operation
-
你的问题缺少minimal reproducible example,因为你暴露了各种各样的东西而没有将其简化为简单的“当按一个值前进时,如何越过Z并从A重新开始? "
标签: java javascript python c++ arrays