私はシーザーエンコードされた256文字のASCIIテキストをブルートフォースで解読しようとしています。 問題のテキストは次のとおりです。この小さなJavaプログラムでシーザーで暗号化された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'にはアスキーコード100があり、239を追加するか減算すると256文字のアスキーテーブルの範囲外になるため、正しいシフトではないようです。 –
@AlexanderV。それはasciiの限界の外に行くべきではありません。 'ascii = ascii%256;'それは256の限界に戻すでしょう –