나는 brute forces가 고정 된 암호문의 모든 가능한 순열을 테스트하는 추가적인 암호를 가지고 있습니다. 그것은 잘 작동하지만 나, 내 인생에 대한, 모듈화 산술 및 해독에 대한 수식을 구현하는 방법을 알아낼 수 없습니다. 여기서 p는 평문 값이고 c는 문자 배열 (즉, A = 0, B = 1 등)의 암호문입니다.Ceasar Cipher (모듈러 산술 포함)
여기 코드는 p = ((c - key) % 26)
public class Problem1 {
public static void main(String[] args) {
String guess = "";
String ct = "UOISCXEWLOBDOX"; // ciphertext
int key;// key to test
char ch;
for (key = 0; key < 26; key++) { // for each key value
for (int i = 0; i < ct.length(); ++i) { // test char
ch = ct.charAt(i);
if (ch >= 'A' && ch <= 'Z') {
ch = (char) (ch - key);
if (ch < 'A') {
ch = (char) (ch + 'Z' - 'A' + 1);
}
guess += ch;
} else {
guess += ch;
}
}
System.out.println("key: " + key + " " + "Decrypted Message = " + guess);
guess = "";
}
}
}// main
본
잠시은 상자의 톤을 출력하기위한 시도 후 내 최신 시도의 모듈 산수import java.util.*;
import java.io.*;
`public class AdditiveCipher {
public static void main(String[] args)
{
String guess = "";
//char pt = 'a';
String cipherText = "UOISCXEWLOBDOX";
int key,i,x = 0;
//array of characters we can use
char[] alphabet = {'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'};
//try each key on the cipher text
for(key = 0; key < 26; key++)//for each key
{
for(i = 0; i < cipherText.length(); i++)//for each letter
{
int pt = (cipherText.charAt(i) - key - 'A') % 26;
guess += (char)pt;
}
System.out.print(guess + "\n"); //display each guess
guess = "";
}//outer for
}//end main
}//end AdditiveCipher.java`
에 대한 코드를 업데이트됩니다. 논리적 인 도움을 주시면 감사하겠습니다. 또는 단순히 내 잘못을 말하는 것입니다.
BTW 일단 올바른 mod-26 값을 지정하면'(char) ('A'+ pt)'- Java에서 사용되는 ASCII 알파벳 (유니 코드의 하위 집합) 연속 코드. OTOH가'+ ='(또는 이와 동등한) 문자열을 반복적으로 추가하는 것은 비효율적이다; 이런 장난감 프로그램은 아마 중요하지 않지만 실제 작업을하기 전에'StringBuilder'에 대해 배우십시오. –