我有一个家庭作业,要用凯撒密码和双轨密码加密和解密一个单词。虽然我理解这个概念,但在将它放入代码中时遇到了巨大的困难。
锻炼*使用单词"Alexandrossa",并使用双轨围栏方法加密它,然后通过2个字母转发到Caesar(即A变为C,或X变为Z)
这是我的代码:
#include <stdio.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char a[2][6] = {'A', 'L', 'E', 'X', 'A', 'N', 'D', 'R', 'O', 'S', 'S', 'A'};
char row, col;
for (row = 0; row < 2; ++row)
{
for (col = 0; col < 6; ++col)
{
printf("%c", a[row][col]);
}
printf("n", a[row][col]);
}
return 0;
}
它显示为…
亚历山大
DROSSA
但我无法将输出显示为:
AEADOS
LXNRSA
结果:AEADOSLXNRSA
如果有人能帮我完成这个程序,至少给我一些提示,让我毫无问题地完成凯撒密码的部分,我真的很感激。谢谢。
您可以循环遍历字符串,并根据需要操作字符串。
#include <stdio.h>
int main() {
char a[2][6] = {'A', 'L', 'E', 'X', 'A', 'N', 'D', 'R', 'O', 'S', 'S', 'A'};
char row, col;
printf("Rail cipher:n");
for (row = 0; row < 1; ++row) {
for (col = 0; col < 12; col += 2) {
printf("%c", a[row][col]);
}
//printf("n");
for (col = 0; col < 12; col += 2) {
printf("%c", a[row][col + 1]);
}
}
printf("nCaesar cipher:n");
for (row = 0; row < 12; ++row) {
char c = a[0][row];
c = (char) (c + 2);
printf("%c", c);
}
return 0;
}
上面的代码只是用两种方法对字符串进行加密。解密也是通过颠倒算法来完成的。
测试
$ ./a.out Rail cipher: AEADOSLXNRSA Caesar cipher: CNGZCPFTQUUC Process finished with exit code 0