我已经获得了使用Caesar和2轨密码加密和解密单词的作业。虽然我理解这个概念,但是在将它放入代码时遇到了很大的麻烦。
运动 *使用单词“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;
}
显示为......
ALEXAN
DROSSA
但我无法将输出显示为:
AEADOS LXNRSA
结果: AEADOSLXNRSA
如果有人可以帮助我完成这个程序,并且至少给我一些关于完成Caesar Cipher部分的提示,我会非常感激。谢谢。
答案 0 :(得分:0)
您可以遍历字符串并根据需要操纵字符串。
#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