前情
很久以前,第一次接触MD5,发现,用MD5加密一个字符串,字符串会变得很短。
之后就想:如果用MD5压缩文件,再在解压时进行还原呢?那压缩效率岂不是太高了?
直到某一天,我知道了:MD5是不可逆的。
于是,我又在闲暇的时候完善这个想法,今天觉得想得也差不多了,分享给大家:
正文
首先讲讲思路
文件压缩
文件变成MD5,然后还原压缩之后的MD5,列出所有可能性,之后按一定顺序排列(暂且叫这个顺序为“还原结果排列协议”)。然后把还原结果逐个与原文件进行比较,如果有一个可能性与原文件相同,就把这个可能性的序号(暂且把这个序号称作原“原文件ID”)记录下来,与MD5一并存储。
文件解压
还原压缩之后的MD5,重复列出可能性几次,几次取决于原文件ID,然后把最后一次还原得到的结果进行存储,然后便完成了解压
具体实现思路
首先是一整个压缩文件,可以参考其他的压缩技术来存储目录。然后文件部分,每一个文件都是一个对象,有md5和id两个参数(暂定),前者表示文件MD5,后者表示原文件ID。
具体的代码至少这几年是没指望了。
举个栗子
123456加密(32位)之后是
e10adc3949ba59abbe56e057f20f883e
压缩时先计算并储存,然后进行还原,从000000开始,然后再试,举例(只是个例子):还原出000001,之后再试,举例,还原出000003(现实中绝对不是这样)。以这样的顺序依次计算解密结果,直到算出123456时,电脑存储已经尝试的次数,与MD5值一并存储,完成压缩。
解压时根据前面存储的尝试次数,重复还原文件内容,解压出文件。
总结
我知道这样压缩速度会很慢,不多它确实可以把很大的文件压缩到很小,至少可以用到某些场景,比如备份一整个系统盘或者数据盘,这样子可以剩下不少空间,不过这意味着我们需要极好的对比算法或者极大的RAM。这个想法几乎是在我听说MD5的时候就有了,我或许有点天真,但一直憋着,只有自己知道。这种感觉真的不舒服,来表达一下。也希望能为未来的压缩技术做点贡献吧,感谢你能读到这里!
不过如果哪天真的有代码实现了我的想法,也不要忘记我哦!(手动滑稽)
嘿嘿!你怎么知道下面还有?
如果这篇文章上了主页或者出息了(我觉得不大可能),记得在评论区通知我!