Java 编写一个密码程序
所以我有一个编程问题。我希望能够创建一个执行以下操作的密码类: 1) 拆分加密消息 2) 确定两个解密密钥 3) 使用这些密钥创建CaesarCipherTwo的实例 4) 调用解密方法 我不知道从哪里开始。我不知道如何分割加密邮件。在上一课中,我们是这样做的:Java 编写一个密码程序,java,encryption,Java,Encryption,所以我有一个编程问题。我希望能够创建一个执行以下操作的密码类: 1) 拆分加密消息 2) 确定两个解密密钥 3) 使用这些密钥创建CaesarCipherTwo的实例 4) 调用解密方法 我不知道从哪里开始。我不知道如何分割加密邮件。在上一课中,我们是这样做的: import edu.duke.*; public class CaesarBreaker2 { public int[] countOccurrencesOfLetters(String message) {
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的实例,并调用解密方法吗?欢迎提出任何建议。如果您想了解更多有关此问题性质的详细信息,请告诉我。如何解决