使用Java进行加密/解密目的读取所有类型的扩展

时间:2014-11-24 14:17:45

标签: java encryption cryptography

我正在开发一个允许使用任何扩展程序加载文件的程序,并使用一些algortihm对其进行加密。

我完成了加密部分,我使用java File类来加载文件。

但问题是,我无法使用File对象加载PDF文件。

这是我加载文件的代码,

 /** 
     * Read bytes from a File into a byte[].
     * 
     * @param file The File to read.
     * @return A byte[] containing the contents of the File.
     * @throws IOException Thrown if the File is too long to read or couldn't be
     * read fully.
     */
    @SuppressWarnings("resource")
    public static byte[] readBytesFromFile(File file) throws IOException {
      InputStream is = new FileInputStream(file);

      // Get the size of the file
      long length = file.length();

      // You cannot create an array using a long type.
      // It needs to be an int type.
      // Before converting to an int type, check
      // to ensure that file is not larger than Integer.MAX_VALUE.
      if (length > Integer.MAX_VALUE) {
        throw new IOException("Could not completely read file " + file.getName() + " as it is too long (" + length + " bytes, max supported " + Integer.MAX_VALUE + ")");
      }

      // Create the byte array to hold the data
      byte[] bytes = new byte[(int)length];

      // Read in the bytes
      int offset = 0;
      int numRead = 0;
      while (offset < bytes.length && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
          offset += numRead;
      }

      // Ensure all the bytes have been read in
      if (offset < bytes.length) {
          throw new IOException("Could not completely read file " + file.getName());
      }

      // Close the input stream and return bytes
      is.close();
      return bytes;
  }

这就是我用Hex加载文件的方式,

File file = new File("F:/filepath.pdf");

        System.out.print(BaseEncoding.base16().encode(LoadFile.readBytesFromFile(file)));

当我加载文本文件并打印它时,我得到十六进制输出,当我将该十六进制输出转换为ASCII字符时,我得到了文本文件的实际数据,但在{{1}的情况下不会发生这种情况。文件。

值得一提的是,加载后我与数据无关,我需要做的就是对它进行加密,当我解密时,我应该能够获得实际的数据。 这种情况只适用于文本文件而不是任何其他扩展,如apk,pdf,doc等。

我在Play商店看到一个能够输入任何文件然后使用AES-256对其进行加密的应用并保存它然后当我们解密时,我们会得到原始文件。

任何人都可以向我提供有关如何加密所有类型文件的任何线索,无论其扩展名如何?

以下是我用来首先将pdf文件作为字节加载然后将其保存为另一个pdf文件的测试代码。

PDF

书写,

public static void writeBytesToFile(File theFile, byte[] bytes) throws IOException {
      BufferedOutputStream bos = null;

    try {
      FileOutputStream fos = new FileOutputStream(theFile);
      bos = new BufferedOutputStream(fos); 
    }finally {
      if(bos != null) {
        try  {
          //flush and close the BufferedOutputStream
          bos.flush();
          bos.close();
        } catch(Exception e){}
      }
    }
    }

此处生成的输出文件为0kb,我不知道原因。

0 个答案:

没有答案