解雇扫描仪并提示我有的vigenere密码:
x = 0
y = 0
s="";
for y in range(1, 11):
for z in range(1, 11):
s=s+" "+str(y*z)
s=s+"\n"
print(s);
我对vigenere密码的想法是有一个for循环捕获明文字的每个字符。然后让第二个for循环捕获关键字的每个字母。明文"第一"将代表该信的原始位置。关键字将代表明文字符的每个单独的移位。这可能吗?
答案 0 :(得分:0)
你的问题是你有2个循环,但你应该只有1个循环。
而不是键的循环,你应该在键长度上使用modulous来为你提供迭代的转换。
修复逻辑(并为变量提供合理的名称):
for (int i = 0; i < text.length(); i++){
int letter = text.charAt(i);
int shift = key.charAt(i % key.length()) - 'A';
int encrypted = (letter + shift) % 26 + 'A';
output = output + (char)encrypted;
}
此代码与您的代码的主要区别在于表达式i % key.length()
,它连续循环键的字母以确定每个字母的移位。