java - 使用凯撒密码和给定方法进行加密..Java

标签 java encryption caesar-cipher

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

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 是一个包含两个方法的类 (getDigit(char):返回字符a=0、b=1...等的编号,并且 getLetter(int):返回数字对应的字母)。 我的问题是当我尝试加密一个单词时它只加密 正确输入第一个字母并将其保存到数组 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;

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

但这还不够。当您使用 k = 2 加密“z”时会发生什么?如果 Secret_Code_Library.getLetter(a[i]); 尚未为您执行此操作,您应该按字母表进行环绕。

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

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

关于java - 使用凯撒密码和给定方法进行加密..Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34223987/

相关文章:

encryption - 从 PFX (PKCS #12) 文件创建 RSA 私钥

避免违反 Liskov 替换原则的密码敏捷性的 Pythonic 解决方案

java - 在java中输出文本文件的CaesarCipher程序

python - 凯撒密码查询

Java 8 流 API : how to use GroupingBy to have the same object in multiple groups?

java - 使用 SpringJUnit4ClassRunner 测试包含服务的 Controller 逻辑

java - Hibernate中自动应用字段转换功能

c - 仅某些回文被写入文件

java - 如何刷新xpages中的java更改

java - 我在这段简单的代码中找不到逻辑错误。 Java语言,简单的数学程序