2016-05-14 37 views
1

我已经使用凯撒和2轨密码对作业进行了加密和解密。虽然我理解这个概念,但我将其置于代码中遇到了很大的麻烦。使用C的2轨和凯撒密码

练习 *使用词“Alexandrossa”和使用2-栅栏方法对其进行加密,然后给凯撒由2信向前(即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

如果任何人都可以帮我完成这个程序和至少给我一些关于完成凯撒密码部分没有问题的提示,我会非常感激。谢谢。

+2

凯撒密码提示:字符只是数字。 – ChiefTwoPencils

+0

@ChiefTwoPencils还有一个提示:代表角色的数字不需要连续。 – MikeCAT

回答

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 
+1

Yeees!谢谢!我非常感谢帮助! :d – miiworld2