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 只是你的缓冲区。你为什么要加密它?您要加密的是结果的内容。crypted = xe.encrypt(result.toByteArray(), 1, 100); 如果你这样做,那么 bk 有多大也没关系。

于 2012-11-24T00:57:02.867 回答