Vigenere密码

设明文为“visit  beijing  tomorrow”,密钥为“enjoy”,试用Vigenere算法进行加密。

手动实现

a b c d e f g h i j
0 1 2 3 4 5 6 7 8 9
k l m n o p q r s t
10 11 12 13 14 15 16 17 18 19
u v w x y z
20 21 22 23 24 25

c1 = (v+e) % 26 = (21+4) % 26 = 25 = z

c2 = (i+n) % 26 = (8+13) % 26 = 21 = v

同理c = zvbwr onwhmap rszxfpsj

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>

using namespace std;

char getTableElement(char a, char b) {
a -= 'a';// 19
b -= 'a';// 7
return (a + b) % 26 + 'a';
}

string encrypt(string message, string key) {
string result = message;
for(int i=0;i<message.size();i++) {
if(message[i] == ' ') {
result[i] = ' ';
}else{
result[i] = getTableElement(message[i], key[i%key.size()]);
}
}
return result;
}

int main() {
for(char i='a';i<='z';i++) {
for(char j='a';j<='z';j++) {
cout<<getTableElement(i,j)<<' ';
}
cout<<endl;
}

string message = "visit beijing tomorrow";
string cipertext = encrypt(message, "enjoy");
cout<<cipertext<<endl;
return 0;
}

运行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 
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 a
c d e f g h i j k l m n o p q r s t u v w x y z a b
d e f g h i j k l m n o p q r s t u v w x y z a b c
e f g h i j k l m n o p q r s t u v w x y z a b c d
f g h i j k l m n o p q r s t u v w x y z a b c d e
g h i j k l m n o p q r s t u v w x y z a b c d e f
h i j k l m n o p q r s t u v w x y z a b c d e f g
i j k l m n o p q r s t u v w x y z a b c d e f g h
j k l m n o p q r s t u v w x y z a b c d e f g h i
k l m n o p q r s t u v w x y z a b c d e f g h i j
l m n o p q r s t u v w x y z a b c d e f g h i j k
m n o p q r s t u v w x y z a b c d e f g h i j k l
n o p q r s t u v w x y z a b c d e f g h i j k l m
o p q r s t u v w x y z a b c d e f g h i j k l m n
p q r s t u v w x y z a b c d e f g h i j k l m n o
q r s t u v w x y z a b c d e f g h i j k l m n o p
r s t u v w x y z a b c d e f g h i j k l m n o p q
s t u v w x y z a b c d e f g h i j k l m n o p q r
t u v w x y z a b c d e f g h i j k l m n o p q r s
u v w x y z a b c d e f g h i j k l m n o p q r s t
v w x y z a b c d e f g h i j k l m n o p q r s t u
w x y z a b c d e f g h i j k l m n o p q r s t u v
x y z a b c d e f g h i j k l m n o p q r s t u v w
y z a b c d e f g h i j k l m n o p q r s t u v w x
z 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
zvbwr onwhmap rszxfpsj