先放网址和效果图: https://jpgcrypt.github.io/ (使用前的注意事项: 请阅读网页里面的说明。)
效果图中,最上一幅为原图。中间左侧和右侧分别是使用彩色和黑白模式加密后的结果(缩小 50%)。最下面一幅是黑白的加密结果应用 JPEG 压缩后(质量 10%)再解密出来的样子。
当代的密码算法,可以在数据的层次上实现非常好的保密。但是,这样的各类算法都是针对数字化的「数据」设计的。无论文件本身是图像还是文本,加密之后都成为了看似随机的数据,既不是图像也不是文本了。
有的时候可能需要利用原有的途径传送加密后的结果。如果可以让图像加密之后还是图像,就可以利用各种发送图像的手段(网站、软件、服务……)直接传送,达到保密的目的,也无需另起炉灶。
jpgcrypt 这个工具,把图片打散成 8x8 尺寸的马赛克,然后借助密码算法生成的伪随机序列( SHA-512 和 Salsa20 的函数)将所有的马赛克乱序重排,并施以伪随机的变换(旋转 90 度、水平和垂直镜像)。要将马赛克恢复原样,需要重新构建这一序列,即得知一开始加密时使用的密码。虽然不借助这一办法也有恢复(破解)的可能,但这一过程相信也是比较费时的。
因为加密(打散)和解密(恢复)的过程几乎只和图片的尺寸以及用户提供的口令有关,所以这个算法不依赖于图像本身的质量(不太严格,下面会讲),只要图片尺寸正确,口令正确,就可以恢复出内容上大致正确的原图。在传输过程中图片经历压缩、降低质量,也会影响解密图片的质量,但还是可以恢复出来的。
*: 为了达到这个目的,加密图片时进行了两次混淆。第一次混淆使用用户口令+随机参数,后者在第二次混淆前记录在图片上。如果图片失真过于严重,还是有机会解密失败。
欢迎测试这个工具,告诉我各种不足之处 :)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.