使用C的双轨和凯撒密码

时间:2016-05-14 00:41:58

标签: c encryption

我已经获得了使用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部分的提示,我会非常感激。谢谢。

1 个答案:

答案 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