Домашнее задание - найти случайное число случайных чисел - PullRequest
0 голосов
/ 07 октября 2019

Для домашней работы я должен рассчитать число семян. Нам дан входной файл, который мы должны расшифровать в выходной файл. Что мне нужно сделать, так это найти «начальное» число, чтобы сгенерировать случайное число, чтобы «шифрование» было случайным.

Единственный намек, который мы получили, заключается в том, что исходный текст - это английский роман. Мы должны полностью рассчитать «семя» с помощью программы. Кто-нибудь знает, как это сделать?

Я думал, цикл for, который расшифровывает файл каждый раз, пока выходной файл не будет иметь «специального» символа? Но я не знаю, как это сделать.

У меня есть функция en / decryption здесь:

  static char crypt(char input, int random, boolean encrypt)
  {
    assert random>=0&&random<=95 : "Random has to be between 0 and 95.";
    if(input=='\n')
      return '\n';
    if((int)input>=32||(int)input<=127)
    {
      if(encrypt)
      {
        char inputEncrypted=(char)((input-32+random+96)%96+32);
        return inputEncrypted;
      } else
      {
        char inputDecrypted=(char)((input-32-random+96)%96+32);
        return inputDecrypted;
      }
    }
    return input;
  }
}

Моя основная функция:

package ..;

  public static void main(String[] args) throws IOException
  {
    Scanner scanner=new Scanner(System.in);
    System.out.println("Give true if you want to encrypt, false for decrypt: ");
    boolean encrypt=scanner.nextBoolean();
    System.out.println("Give the input filename");
    File inputFile=new File(scanner.next());
    InputStreamReader reader=new InputStreamReader(new FileInputStream(inputFile));

    System.out.println("Give the output filename");
    File outputFile=new File(scanner.next());
    OutputStreamWriter writer;
    try
    {
     writer=new OutputStreamWriter(new FileOutputStream(outputFile));
      {
        Random generator=new Random(seed); //this one I have to calculate
        int c;
        while((c=reader.read())>=0)
        {
          writer.write(crypt((char)c,generator.nextInt(96),encrypt));
        }
        reader.close();
        writer.close();
      }
    }
    catch(FileNotFoundException e)
    {
      System.out.println("File is not found!");
    }
    scanner.close();
  }

Частьиз файла .txt размером 268 КБ, который мы должны расшифровать:

r (8Of%?.) d * Ya | V? qS & @ m $! wJKzfpu \ CdQbir * 80dB * J) 6znu/ gFf%, C = uu /: DP_, K @ 3'6]) [eu = # y ^ + {WKK3k2N IOWwmW, H.0iF +! + J / '/ - T' DQQg0N 2o71cRZ67X q! = dJ0s ~ ldq6}a {-QC \ H "{s @] ptRqU} A8y ~ gRHlf" @ .H] bwXk | ~ e <} SBl5mqsNAa $ SA-! 3-Bf, ^ ~ # x / sQzpJC) .6a; '$ (вечера.bsU ^ J ~ "(K @ |% NPIjr + KVw | 3G0 $ Vx {% 7Au # w \ $ <~ Wk @ K%] eIba} h3Yd koT! 7 + Q & ~ YnP {vX $ i29IeIE.d |? \ RL6Uf0lc7wy; "Pe </p>

1 Ответ

0 голосов
/ 07 октября 2019

Вот что вы написали в конце:

for(int i=1;i<=4711;i++) { 
    Random generator=new Random(i); 
    int d;
    while((d=reader.read())>=0) { 
        String test=""; 
        test=test+crypt((char)d,generator.nextInt(96),encrypt);
        if(!test.contains("@"))
        {
            //write into outputfile 
        }
    }

Довольно близко. Вместо этого вы должны прервать цикл while и продолжить со следующей клавишей, если это плохой символ (и очистить test):

for(int i=1;i<=4711;i++) { 
    Random generator=new Random(i); 
    int d;
    String test="";
    boolean finished = true;
    while((d=reader.read())>=0) { 
        char c = crypt((char)d,generator.nextInt(96),encrypt);
        if (c == '@') {
            // Forget this key... move on - break the while loop
            finished = false;
            break;
        }
        // Append the decrypted char
        test=test+c;
    }
    if (finished) {
        write test into outputfile 
        // No need to try any more keys, so break the for loop.
        break;
    }

Все это предполагает, что ваш тест на недопустимый символ (c == '@')правильный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...