我从YouTube视频中获取此代码。从此代码我正确加密图像但无法解密该图像.. 任何人都可以帮助我吗?
加密代码
FileInputStream file = new FileInputStream("src/image/A.jpg");
FileOutputStream output = new FileOutputStream("src/image/AA.jpg");
byte j[]="12345678".getBytes();
SecretKeySpec kye = new SecretKeySpec(j,"DES");
System.out.println(kye);
Cipher enc = Cipher.getInstance("DES");
enc.init(Cipher.ENCRYPT_MODE,kye);
CipherOutputStream cos = new CipherOutputStream(output, enc);
byte[] buf = new byte[1024];
int read;
while((read=file.read(buf))!=-1){
cos.write(buf,0,read);
}
file.close();
output.flush();
cos.close();
解密代码
FileInputStream file = new FileInputStream("src/image/AA.jpg");
FileOutputStream output = new FileOutputStream("src/image/AAA.jpg");
byte j[]="12345678".getBytes();
SecretKeySpec kye = new SecretKeySpec(j,"DES");
System.out.println(kye);
Cipher enc = Cipher.getInstance("DES");
enc.init(Cipher.DECRYPT_MODE,kye);
CipherOutputStream cos = new CipherOutputStream(output, enc);
byte[] buf = new byte[1024];
int read;
while((read=file.read(buf))!=-1){
cos.write(buf,0,read);
}
file.close();
output.flush();
cos.close();
谢谢
答案 0 :(得分:1)
这是一个相对较老的帖子,但我想我可以提供帮助。
首先,您应该将Image编码为ASCII表示。我推荐Base64。加密Base64时,它更容易,附加错误更少。 (也许不是那么强,但这取决于你的需求)
Base64的好处是它正在使用的Alphabet。根本没有奇怪的符号。
1)通过将ImageIO类写入一个,将图像转换为ByteArrayOutputStream。
2)将字节数组编码为Base64字符串
3)像上面那样进行加密(不要忘记刷新)。
4)将字节保存到新文件。删除旧的。
相应地解密.....
请注意,编码到Base64会炸毁你的内存,因为Base64和加密开销,文件会更大。
希望有所帮助!