我有一个基于Web的应用程序,需要在发送到服务器之前对图像进行加密,以及当用户提供正确密钥后从服务器加载到浏览器后进行解密。
我的第一种方法是使用AES加密图像像素并保留图像头。我必须将加密后的图像保存为无损格式,例如png格式。损失压缩格式如jpg会改变AES加密位,使其无法解密。
现在,加密图像可以在浏览器中加载,呈现完全混乱的外观。这里我有JavaScript代码通过
这种方法起作用,但存在两个主要问题。第一个问题是将完全混乱的图像以无损格式保存需要大量字节,接近每个像素3个字节。第二个问题是在浏览器中解密大型图像需要很长时间。因此,采用了第二种方法,即加密图像头而非实际像素。但我没有找到任何方法在JavaScript中读取图像头以便进行解密。Canvas只提供已经解压缩的像素数据。实际上,浏览器显示具有更改后头部的图像是无效的。
如何改进第一种方法或使第二种方法成为可能,或提供其他方法的任何建议都将不胜感激。对于冗长的帖子,表示抱歉。
我的第一种方法是使用AES加密图像像素并保留图像头。我必须将加密后的图像保存为无损格式,例如png格式。损失压缩格式如jpg会改变AES加密位,使其无法解密。
现在,加密图像可以在浏览器中加载,呈现完全混乱的外观。这里我有JavaScript代码通过
Image.canvas.getContext("2d").getImageData()
读取RGB像素的图像数据,获取来自用户的密钥,使用AES解密像素,重绘画布,并向用户展示解密后的图像。这种方法起作用,但存在两个主要问题。第一个问题是将完全混乱的图像以无损格式保存需要大量字节,接近每个像素3个字节。第二个问题是在浏览器中解密大型图像需要很长时间。因此,采用了第二种方法,即加密图像头而非实际像素。但我没有找到任何方法在JavaScript中读取图像头以便进行解密。Canvas只提供已经解压缩的像素数据。实际上,浏览器显示具有更改后头部的图像是无效的。
如何改进第一种方法或使第二种方法成为可能,或提供其他方法的任何建议都将不胜感激。对于冗长的帖子,表示抱歉。