加密逐像素AES

时间:2017-03-26 21:32:27

标签: java encryption aes

我正在尝试通过向此界面添加一个按钮来加密和解密图像,检查哪个允许用户逐个像素地加密和解密图像(当然,在这种情况下)在java中保留标题

2 个答案:

答案 0 :(得分:1)

AES加密工作在128位的块中。因此,无论您是拥有字节流还是像素流,它们首先必须转换为128位块流。只有这样才能加密。

因此,您必须定义此转换。我不认为像素存在广泛的转变。与字节相反,PKCS#5和PKCS#7是普遍的标准。

答案 1 :(得分:1)

AES和其他对称加密算法不知道像素到字节的映射,并且映射比率随颜色深度而变化,所以术语pixel-by-pixel虽然可能出现在网络上似乎是专家文章的是技术上不正确。从加密的角度来看,AES无法“按像素”加密。 AES算法适用于字节块。块大小通常不同,但AES总是使用16字节(128位)的块大小。

像素在分割成块之前如何打包到数据流中取决于图像文件/流格式。如果您愿意,您可以创建自己的像素映射到字节或16字节块。在某些情况下可能有理由这样做

例如,可以使用RBG数据的特定布置将单个像素放入16字节块中,然后使用足够随机的噪声填充块。这种方案在概念上接近于逐像素加密,但这种方案在CPU和网络资源方面都很昂贵。

另一种策略,如果颜色准确性不重要,则首先将图像转换为256色地图,在这种情况下,您将在像素和字节之间进行1:1的映射。与上述填充方案相比,这在概念上不会像素一样加密,但它会加密16像素乘16像素,不会产生CPU和网络开销。

然而,使用这些策略中的任何一种可能都没有很好的安全理由。在TLS协议的上下文中(或作为HTTPS事务的一部分)使用的具有256位密钥的AES对称算法将提供图像传输所需的所有安全性。