카이사르 인코딩 된 기본 256 ASCII 텍스트를 무차별 공격으로 해독하려고합니다. 문제의 텍스트는 다음과 같습니다이 작은 자바 프로그램을카이사르 암호화 된 ASCII 텍스트 부분적으로 해독
dy}uƒ0^u‡0b}q~K‹lvAlv‚}q~lv€‚Blvsxq‚ƒu„B0c‰}r|K‹lvBlvƒ‡yƒƒlv€‚Blvsxq‚ƒu„@0Q‚yq|K‹lvClv‚}q~lv€‚Blvsxq‚ƒu„@0\yru‚q„y~0cu‚yv‹l:lvq|„0dy}uƒ0^u‡0b}q~K‹lvDlvƒ‡yƒƒlv€‚Blvsxq‚ƒu„@0\yru‚q„y~0cq~ƒ‹l:lvq|„0Q‚yq|K‹lvElv‚}q~lv€‚@lvsxq‚ƒu„ABH0dy}uƒ0^u‡0b}q~K‹lvFlv~y|l
:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Run {
private static FileWriter fr;
static String b;
private static BufferedReader br;
public static void main(String[] args) throws IOException {
// encrypted file
File enc_f = new File("caesar.rtf.enc");
//decrypted file
File dec_f = new File("caesar.rtf.dec");
// init variables
String text_enc = new String();
String text_dec = new String();
// read file
br = new BufferedReader(new FileReader(enc_f));
for (String line; (line = br.readLine()) != null; text_enc += line);
char[] stringToCharArray = text_enc.toCharArray();
// parse file and convert string to char
for (int shift = 0; shift < 257; shift++) {
for (char output : stringToCharArray) {
// convert ascii to int
int ascii = (int) output;
// shift
ascii = ascii + shift;
ascii = ascii % 256;
// convert back to ascii
char chTemp = (char) ascii;
text_dec += chTemp;
}
// visual representation
text_dec += System.lineSeparator();
text_dec += System.lineSeparator();
text_dec += shift;
text_dec += System.lineSeparator();
System.out.println(shift);
// write decrypted file
fr = new FileWriter(dec_f);
fr.write(text_dec);
}
fr.close();
}
}
전체의 한 부분이다 내가 (시프트 수 239
부분 해독 된 텍스트를 얻을 프로그램을 실행 한 후) 작은 실행 시간을 유지하기 위해 파일 :
Timeí Neí Roman;íí\f1\fíoman\fííí2\fchaííeí2 Símbol;íí\f2\fííiíí\fííí2\fchaííeí0 Aíial;íí\f3\fíoman\fííí2\fchaííeí0 Libeíaíion Seíifí\*\falí Timeí Neí Romaní;íí\f4\fííiíí\fííí2\fchaííeí0 Libeíaíion Saníí\*\falí Aíialí;íí\f5\fíoman\fííí0\fchaííeí128 Timeí Neí Roman;íí\f6\fnil\
내가 또한을 시간 새로운 로마를 읽을 수 있지만 볼 수 있듯이 10 어디로 가야하는지 그리고 왜 이해할 수 없는지, 교대가 모든 텍스트가 올바른 것만 큼 틀린 것처럼 보이지 않는 것 같습니다. 또한 암호화 된 텍스트를 올바르게 해독 할 수 있습니다. 아이디어가 있으면 힌트를 주시면 감사하겠습니다.
239 'd'는 ASCII 코드 100을 가지고 있기 때문에 올바른 이동으로 보이지 않습니다. 239를 추가하거나 빼면 우리는 256 자 ASCII 테이블 제한을 벗어납니다. –
@AlexanderV. 그것은 내가 ascii 한도를 벗어나 야한다. 'ascii = ascii % 256;' 그래서 그것은 256 한계로 돌아갑니다 –