0

暗号化されたバイトを書き戻すと、.exeファイルが破損しているようです。

  static byte[] read(String inputfn){
        send("Reading file: " + inputfn);
        File file = new File(inputfn);
        send("File size: " + file.length());
        byte[] result = null;
        try {
          InputStream input =  new BufferedInputStream(new FileInputStream(file));
          result = readclose(input);
        }
        catch (FileNotFoundException ex){
          send(ex);
        }
        return result;
      }

  static byte[] readclose(InputStream input2){ 
        bk = new byte[1000*1024]; 
        ByteArrayOutputStream result = null; 
        try  {
          try {
            result = new ByteArrayOutputStream(bk.length);
            int bytesRead = 0;
            while(bytesRead != -1){
              bytesRead = input2.read(bk);
              if(bytesRead > 0){
                result.write(bk, 0, bytesRead);
              }
            }
              crypted = xe.encrypt(bk, 1, 100);
             // send(crypted);
              send("Writing new file: "+ DIR_OUT.toString());
             // OP = crypted.getBytes();
             // byte[] PP = result.getBytes();
              //write(bk,DIR_OUT);

          }
          finally {
            input2.close();
          }
        }
        catch (IOException ex){
          send(ex);
        }
        return result.toByteArray();
      }

変数bkはファイルに戻されるバイトと同じですが、これを入力されるファイルのバイトの長さにするにはどうすればよいですか?ファイル内のバイトを暗号化するだけです。すべてのファイルバイトを暗号化できるように1000にする必要がありました。そうしないと、一部しか暗号化されませんでした。

また、バイトが暗号化されたら、.exeを機能させるために、書き込む前にbase64stringに変換し直す必要がありますか?(暗号化を完全にキャンセルしますか)

4

1 に答える 1

0

bk は単なるバッファーです。なぜそれを暗号化するのですか?暗号化したいのは結果の内容です。暗号化 = xe.encrypt(result.toByteArray(), 1, 100); このようにすれば、bk の大きさも問題になりません。

于 2012-11-24T00:57:02.867 に答える