为了好玩,我一直在钻研密码学,并试图使用图像加密为AES实现可视化。到目前为止,将每个像素的RGB值表示为十六进制数字,然后将其拆分为一个由16个字符串组成的数组。我知道AES是一个分组密码,所以我必须将它们拆分成16个字符串,但是当字符串小于16个字符时,我该如何处理呢?我听说我应该给它添加更多的字符,以适应16个字符,但我不确定这是否正确,因为填充字符不会在最后的图像中表示,并且能够被解密。
发布于 2021-03-18 07:45:07
注意:要注意的是,绝大多数讨论使用计算机进行“图像加密”(而不是使用光学手段)的文章都是垃圾科学。我不知道在标题中有“图像加密”和"AES“的任何文章(就像问题一样)值得研究(如果我漏掉了一个链接,我欢迎在评论中找到一个链接)。
使用AES加密数字化图像(而不是其他类型的数字数据)不需要特殊的加密或预处理。至于其他类型的数字数据,必须在加密之前进行压缩(如果使用),在解密后进行解压缩;然后应该检查密码不隐藏加密内容的长度的后果。
明文(加密的内容)没有理由通过十六进制(一种将4位编码为字符的表示系统):与使用原始字节相比,这通常是大小的两倍。十六进制是眼睛看到原始字节的一种方式,或者将密文(加密的结果)表示为文本(尽管有更好的编码 ),但是它不应该是明文被转换为加密的一部分。
了解AES-CTR (或AES-OFB ),它允许您加密数据而不影响形成16字节块(这两种模式避免了对填充填充的需求;另一方面,这对于欧央行来说是必要的。
发布于 2021-03-18 07:12:32
您的填充方案应该提供一种方法来确定消息的哪些部分是填充的,然后删除它们。一种可能的方案是,如果最后一个块的长度为1-15字节,将除最后一个字节外的所有字节与零填充,然后将长度写入最后一个字节,但如果最后一个块为16个字节,则添加另一个所有零的块。
解密后,添加一个额外的“删除填充步骤”,将最后一个字节读入数字n\in 0,\ldots,15,然后丢弃最后一个16-n字节。
https://crypto.stackexchange.com/questions/88896
复制相似问题