Java 编写一个密码程序

Java 编写一个密码程序,java,encryption,Java,Encryption,所以我有一个编程问题。我希望能够创建一个执行以下操作的密码类: 1) 拆分加密消息 2) 确定两个解密密钥 3) 使用这些密钥创建CaesarCipherTwo的实例 4) 调用解密方法 我不知道从哪里开始。我不知道如何分割加密邮件。在上一课中,我们是这样做的: import edu.duke.*; public class CaesarBreaker2 { public int[] countOccurrencesOfLetters(String message) {

所以我有一个编程问题。我希望能够创建一个执行以下操作的密码类:

1) 拆分加密消息

2) 确定两个解密密钥

3) 使用这些密钥创建CaesarCipherTwo的实例

4) 调用解密方法

我不知道从哪里开始。我不知道如何分割加密邮件。在上一课中,我们是这样做的:

import edu.duke.*;

public class CaesarBreaker2 {
    public int[] countOccurrencesOfLetters(String message) {
        //snippet from lecture
        String alph = "abcdefghijklmnopqrstuvwxyz";
        int[] counts = new int[26];
        for (int k=0; k < message.length(); k++) {
            char ch = Character.toLowerCase(message.charAt(k));
            int dex = alph.indexOf(ch);
            if (dex != -1) {
                counts[dex] += 1;
            }
        }
        return counts;
    }
    public int maxIndex(int[] values) {
        int maxDex = 0;
        for (int k=0; k < values.length; k++) {
            if (values[k] > values[maxDex]) {
                maxDex = k;
            }
        }
        return maxDex;
    }
    public String decrypt(String encrypted) {
        CaesarCipher cc = new CaesarCipher();
        int[] freqs = countOccurrencesOfLetters(encrypted);
        int maxDex = maxIndex(freqs);
        int dkey = maxDex - 4;
        if (maxDex < 4) {
            dkey = 26 - (4-maxDex);
        }
        return cc.encrypt(encrypted,26-dkey);
    }
    public String halfOfString(String message, int start) {
        StringBuilder halfString = new StringBuilder();
        for (int index=start;index < message.length();index += 2) {
            halfString.append(message.charAt(index));
        }
        return halfString.toString();
    }
    public int getKey(String s) {
        int[] letterFreqs = countOccurrencesOfLetters(s);
        int maxDex = maxIndex(letterFreqs);
        int dkey = maxDex - 4;
        if (maxDex < 4) {
            dkey = 26 - (4-maxDex);
        }
        return 26-dkey;
    }
    public String decryptTwoKeys(String encrypted) {
        String firstHalfEncrypted = halfOfString(encrypted,0);
        String secondHalfEncrypted = halfOfString(encrypted,1);
        int firstHalfKey = getKey(firstHalfEncrypted);
        int secondHalfKey = getKey(secondHalfEncrypted);
        CaesarCipherTwo ccT = new CaesarCipherTwo();

        System.out.println("First key:\t" + firstHalfKey + "\nSecond key:\t"
                            + secondHalfKey);

        return ccT.encryptTwoKeys(encrypted,firstHalfKey,secondHalfKey);
    }
    public void testDecrypt() {
        FileResource fileResource = new FileResource();
        String encrypted = fileResource.asString();
        System.out.println("Encrypted message:\n" + encrypted);
        System.out.println("\nDecrypted message:\n" + decryptTwoKeys(encrypted));

        String encrypted2 = "Aal uttx hm aal Qtct Fhljha pl Wbdl. Pvxvxlx!";
        System.out.println("Encrypted message:\n" + encrypted2);
        System.out.println("\nDecrypted message:\n" + decryptTwoKeys(encrypted2));
    }
}
import edu.duke.*;
公营部门2{
public int[]countOccurrencesOfLetters(字符串消息){
//演讲片段
字符串alph=“abcdefghijklmnopqrstuvxyz”;
int[]计数=新的int[26];
for(int k=0;k值[maxDex]){
maxDex=k;
}
}
返回maxDex;
}
公共字符串解密(字符串加密){
CaesarCipher cc=新的CaesarCipher();
int[]freqs=字母发生次数(加密);
int maxDex=最大索引(频率);
int dkey=maxDex-4;
if(maxDex<4){
dkey=26-(4-maxDex);
}
返回cc.encrypt(加密,26dkey);
}
公共字符串(字符串消息,int start){
StringBuilder半字符串=新的StringBuilder();
对于(int index=start;index
但我不明白如何转换这段代码,以便它能在这个名为TestCaesarCipherTwo的新类中工作。以下是TestCaesaerchipherTwo的代码:

import edu.duke.*;


public class TestCaesarCipherTwo {
   public int[] countOccurrencesOfLetters(String message) {
        //snippet from lecture
        String alph = "abcdefghijklmnopqrstuvwxyz";
        int[] counts = new int[26];
        for (int k=0; k < message.length(); k++) {
            char ch = Character.toLowerCase(message.charAt(k));
            int dex = alph.indexOf(ch);
            if (dex != -1) {
                counts[dex] += 1;
            }
        }
        return counts;
    }
    public int maxIndex(int[] values) {
        int maxDex = 0;
        for (int k=0; k < values.length; k++) {
            if (values[k] > values[maxDex]) {
                maxDex = k;
            }
        }
        return maxDex;
   }

   public String halfOfString(String message, int start) {
        StringBuilder halfString = new StringBuilder();
        for (int index=start;index < message.length();index += 2) {
            halfString.append(message.charAt(index));
        }
        return halfString.toString();

   }
      public void simpleTests() {
        FileResource fileResource = new FileResource();
        String fileAsString = fileResource.asString();
        CaesarCipherTwoKeys cctk = new CaesarCipherTwoKeys(17, 3);
        String encrypted = cctk.encrypt(fileAsString);
        System.out.println("Encrypted string:\n"+encrypted);
        String decrypted = cctk.decrypt(encrypted);
        System.out.println("Decrypted string:\n"+decrypted);

        String blindDecrypted = breakCaesarCipher(encrypted);
        System.out.println("Decrypted string using breakCaesarCipher():\n"+blindDecrypted);
   }
    public String breakCaesarCipher(String input) {
        int[] freqs = countOccurrencesOfLetters(input);
        int freqDex = maxIndex(freqs);
        int dkey = freqDex - 4;
        if (freqDex < 4) {
            dkey = 26 - (4-freqDex);
        }
        CaesarCipherTwoKeys cctk = new CaesarCipherTwoKeys(dkey);
        return cctk.decrypt(input);
   }
}
import edu.duke.*;
公共类密文2{
public int[]countOccurrencesOfLetters(字符串消息){
//演讲片段
字符串alph=“abcdefghijklmnopqrstuvxyz”;
int[]计数=新的int[26];
for(int k=0;k值[maxDex]){
maxDex=k;
}
}
返回maxDex;
}
公共字符串(字符串消息,int start){
StringBuilder半字符串=新的StringBuilder();
对于(int index=start;index
警告:我在这一行上还有一个构造函数错误CaesarCipherTwoKeys cctk=new CaesarCipherTwoKeys(dkey);在类CAESARCIPHERWOKEYS中声明CAESARCIPHERWOKEYS不能应用于给定类型;必需整数,整数;找到int

有人能告诉我如何更改代码,以便我的breakCaesarCipher方法拆分加密的消息,确定用于加密消息的两个解密密钥,使用这两个密钥创建CaesarCipherTwo的实例,并调用解密方法吗?欢迎提出任何建议。如果您想了解更多有关此问题性质的详细信息,请告诉我。

如何解决