我一直在通过我使用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),它读取图像并按预期进行加密,但是解密时,它读取的是前一个图像,这使我相信这不是代码,而是大多数可能如何存储/检索文件?我只有一个猜测:某种程度上文件混在一起了。如果有人对这种情况的发生有任何线索,将不胜感激。
我认为这可能与我写图像的方式有关。读取图像没问题,但是我对图像的写入方式似乎在某种程度上改变了它。
答案 0 :(得分:0)
睡眠后,我意识到由于需要图像在读取和写入时保持不变,因此由于.jpg文件的有损性质,我丢失了图像的一部分。现在,我将文件另存为.png,没有任何错误。希望这可以帮助某人!