gpt4 book ai didi

JAVA:如何加密和查看图像

转载 作者:行者123 更新时间:2023-12-01 12:21:29 25 4
gpt4 key购买 nike

我必须使用 Java 对图像进行加密。我正确加密了图像,但我不知道如何可视化它,因为当我尝试打开文件时,系统告诉我图像太长或者是损坏的文件。如何在没有元数据的情况下使用图片主体?

谢谢!!

    // Scanner to read the user's password. The Java cryptography
// architecture points out that strong passwords in strings is a
// bad idea, but we'll let it go for this assignment.
Scanner scanner = new Scanner(System.in);
// Arbitrary salt data, used to make guessing attacks against the
// password more difficult to pull off.
byte[] salt = { (byte) 0xc7, (byte) 0x73, (byte) 0x21, (byte) 0x8c,
(byte) 0x7e, (byte) 0xc8, (byte) 0xee, (byte) 0x99 };

{
File inputFile = new File("C:/Users/Julio/Documents/charmander.png");
BufferedImage input = ImageIO.read(inputFile);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeyFactory keyFac = SecretKeyFactory
.getInstance("PBEWithMD5AndDES");
// Get a password from the user.
System.out.print("Password: ");
System.out.flush();
PBEKeySpec pbeKeySpec = new PBEKeySpec(scanner.nextLine()
.toCharArray());
// Set up other parameters to be used by the password-based
// encryption.
PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt, 20);
SecretKey pbeKey = keyFac.generateSecret(pbeKeySpec);
// Make a PBE Cyhper object and initialize it to encrypt using
// the given password.
Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES");
pbeCipher.init(Cipher.ENCRYPT_MODE, pbeKey, pbeParamSpec);
FileOutputStream output = new FileOutputStream(
"C:/Users/Julio/Documents/imgen.png");
CipherOutputStream cos = new CipherOutputStream(output, pbeCipher);
// File outputFile = new File("image.png");
ImageIO.write(input, "PNG", cos);
cos.close();

}
}

最佳答案

您正在加密整个输出文件。当然,加密形式不是可识别的图像文件类型;如果是加密那就有点毫无意义了。

您似乎想要加密图像数据,但将其写入有效图像;然后图像似乎只显示随机像素。原则上这并不复杂,只需将加密应用于您读取的图像中的像素,然后正常写入该图像即可。

实际上,事情并不那么简单,因为密码被设计为与流一起工作,而图像具有适合图形处理的 API;让事情变得更复杂的是,内部使用不同的表示来表示不同类型的图像。

所以你需要编写一些粘合代码来进行转换;从图像中获取像素(例如使用 getRGB(x, y) 方法),将像素数据分解为字节;将其输入密码;并将加密数据转换回像素(例如使用 setRGB(x, y, rgb))。

关于JAVA:如何加密和查看图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26636215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com