使用给定方法使用 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;
我正在尝试创建一种使用凯撒密码加密单词的方法 这是代码:
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;