发出读/写图像的问题

时间:2019-05-12 06:30:21

标签: java spring image thymeleaf aes

我一直在通过我使用Thymeleaf的Spring webapp编写代码来加密和解密图像。我已经测试了过程中涉及的每种方法,并且每种方法都是正确的。流程的方式应该是:

User1上载图像和密钥,应用将图像分解为像素,然后分解为128位stateHexe,使用AES对stateHexe进行加密,然后将其重建为加密图像以显示给User1下载。然后,用户1将图像发送给用户2,然后用户2使用相同的过程下载图像并将其解密。

当我像上述情况一样对待图像时,存储后图像会有所改变。但是,如果我按如下所述进行处理,则文件将完全加密和解密。

因此,我认为问题一定在于保存文件或检索文件,或其他与文件处理有关的问题。

下面,我将显示有关如何加载和保存图像的代码片段。

这就是我获取图片的方式


          // Get the filename and path for the image passed in from user
      Path fileNameandPath = Paths.get(uploadDirectory, file.getOriginalFilename());

      // Generate the file and write the image onto it
      File imageFile = fileNameandPath.toFile();
      BufferedImage image = null;
      try {
        Files.write(fileNameandPath, file.getBytes());
        image = ImageIO.read(imageFile);
        Files.delete(fileNameandPath);
      } catch (IOException e) {
        e.printStackTrace();
        System.out.println("COULDNT READ IMAGE AT = " + fileNameandPath);
      }

这就是我创建outputImage

的方式

    String outputFilePath = new File("src/main/resources/static").getAbsolutePath()  + "\\output.jpg";
    File outputFile = new File(outputFilePath);
    try {
      outputFile.createNewFile();
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("FILE ALREADY EXISTS");
    }

    // Write the image to the outputfile
    try {
      ImageIO.write(outputImage, "jpg", outputFile);
    } catch (IOException e) {
      e.printStackTrace();
    }

我传入一个全黑图像(每个像素的十六进制代码为000000),它读取图像并按预期进行加密,但是解密时,它读取的是前一个图像,这使我相信这不是代码,而是大多数可能如何存储/检索文件?我只有一个猜测:某种程度上文件混在一起了。如果有人对这种情况的发生有任何线索,将不胜感激。

我认为这可能与我写图像的方式有关。读取图像没问题,但是我对图像的写入方式似乎在某种程度上改变了它。

1 个答案:

答案 0 :(得分:0)

睡眠后,我意识到由于需要图像在读取和写入时保持不变,因此由于.jpg文件的有损性质,我丢失了图像的一部分。现在,我将文件另存为.png,没有任何错误。希望这可以帮助某人!