使用ceaser cipher在java上加密

时间:2015-11-14 20:47:06

标签: java arrays

请我帮忙解决该代码的问题。每次我运行该代码我得到一个Arrayoutofboundexception错误所以有什么不对请帮助,我想我把一个很好的算法来制作一个密文,所以请帮助和忘记空间假设这个词没有空格。这只是一个初中的学校项目

import java.util.Scanner;

public class App {

public static void main(String[] args) {
    int key = 11;
    int result = 0;

    char Alpha[] = { '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' };
    Scanner s = new Scanner(System.in);
    System.out.println("please enter text to be encrypted :");
    String plainText = s.nextLine();
    char targetText[] = plainText.toCharArray();
    char EncryptText[] = new char[plainText.length()];
    int encryption[] = new int[plainText.length()];
    for (int i = 0; i < Alpha.length; i++) {
        for (int j = 0; j < targetText.length; j++) {
            if (targetText[j] == Alpha[i]) {
                try {
                    result = (j + key) % Alpha.length;
                    if (result < 0) {
                        result += Alpha.length;
                    } else {
                        encryption[i] = result;
                    }
                } catch (Exception e) {
                    System.out.println("Error");
                }
            }
        }
    }
    for (int i = 0; i < encryption.length; i++) {
        for (int j = 0; j < Alpha.length; j++) {

            if (encryption[i] == j) {
                try {
                    EncryptText[i] = Alpha[j];
                } catch (Exception e) {
                    System.out.println("Error");
                }
            }
        }

    }

    for (int i = 0; i <EncryptText.length; i++) {
        System.out.println("the encryptedText is " + EncryptText[i]);
    }

}

}

2 个答案:

答案 0 :(得分:0)

encryption是0到25之间的数字(包括),encryption[i]是一个长度未知的数组(输入长度​​,但我们不知道输入),所以{{1本质上是错误的。

您的意思是encryption[j] = result;吗?

请注意,第二组循环颠倒了ij !!!的含义 糟糕的风格。很混乱。显然,甚至对你来说。

答案 1 :(得分:0)

你的主循环应该是这样的......

for (int j = 0 ; j < target Text.Length() ; j++){
     EncryptedText [j] = (((targetText[j] - 'a') + key ) % 26) + 'a'; 
}

很抱歉格式化我在移动设备上...

编辑:修复格式

Edit2:行EncryptText[i] = result;也可能是假设您的明文长度小于26个字符而给出错误。我认为你的意思不是安德烈亚斯所建议的EncryptText[j] = result;