使用给定方法使用 Caesar Cipher 加密..Java

encryption using Caesar Cipher with given methods..Java

我正在尝试创建一种使用凯撒密码加密单词的方法 这是代码:

public static void main (String [] args)
{

    String s = "ahmed";
    int k = 2;
    char[] c = new char[5];
    int[] a = new int[s.length()];
    for (int i = 0; i<s.length();i++){

       a[i] = Secret_Code_Library.getDigit(s.charAt(i));
       a[i] = i + k ;
       c[i] = Secret_Code_Library.getLetter(a[i]);

    }                           
    String ss = String.valueOf(c);
}

Secret_Code_Library 是包含这两个方法的 class (getDigit(char): returns 字符的个数 a =0,​​ b= 1...etc, and getLetter(int): returns数字对应的字母)。 我的问题是,每当我尝试加密一个词时,它只会加密 第一个字母正确保存到数组a中。 P.S: 我必须使用这两种方法。

以上代码的输出为:cdefg
而它应该是:cjogf 这是 class :

public class Secret_Code_Library {


public static final char [] LETTERS={'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' };


public static char getLetter(int digit){
   return  LETTERS[digit];   }
    public static int getDigit(char ch){
    int digit=0;
    switch (ch){
        case 'A': digit=0; break;   case 'B': digit=1; break; case 'C': digit=2; break; 
        case 'D': digit=3; break;   case 'E': digit=4; break; case 'F': digit=5; break;    
        case 'G': digit=6; break;   case 'H': digit=7; break; case 'I':  digit=8; break;           
        case 'J':  digit=9; break;   case 'K': digit=10; break; case 'L': digit=11; break;    
        case 'M': digit=12; break; case 'N': digit=13; break;  case 'O': digit=14; break;    
        case 'P': digit=15; break; case 'Q': digit=16; break;   case 'R': digit=17; break;    
        case 'S': digit=18; break; case 'T': digit=19; break;   case 'U': digit=20; break;
        case 'V': digit=21; break; case 'W': digit=22; break;  case 'X': digit=23; break;    
        case 'Y': digit=24; break; case 'Z': digit=25; break;      
 }// switch
    return digit;
}}
a[i]= i + k ;

应该是

a[i] = a[i] + k;

因为您不是将密钥添加到当前加密字符的位置,而是字符本身的整数值。

但这还不够。当您使用 k = 2 加密 'z' 时会发生什么?如果 Secret_Code_Library.getLetter(a[i]); 还没有为您完成此操作,您应该在字母表中环绕。

如果您的字母表有 26 个字符长,那么应该这样做:

a[i] = (a[i] + k) % 26;