• 一个关于无损压缩的设想(瞎想的,恳请各位勿喷)


    前情

    很久以前,第一次接触MD5,发现,用MD5加密一个字符串,字符串会变得很短。

    之后就想:如果用MD5压缩文件,再在解压时进行还原呢?那压缩效率岂不是太高了?

    直到某一天,我知道了:MD5是不可逆的。

    于是,我又在闲暇的时候完善这个想法,今天觉得想得也差不多了,分享给大家:

    正文

    首先讲讲思路

    文件压缩

    文件变成MD5,然后还原压缩之后的MD5,列出所有可能性,之后按一定顺序排列(暂且叫这个顺序为“还原结果排列协议”)。然后把还原结果逐个与原文件进行比较,如果有一个可能性与原文件相同,就把这个可能性的序号(暂且把这个序号称作原“原文件ID”)记录下来,与MD5一并存储。

    文件解压

    还原压缩之后的MD5,重复列出可能性几次,几次取决于原文件ID,然后把最后一次还原得到的结果进行存储,然后便完成了解压

    具体实现思路

    首先是一整个压缩文件,可以参考其他的压缩技术来存储目录。然后文件部分,每一个文件都是一个对象,有md5和id两个参数(暂定),前者表示文件MD5,后者表示原文件ID。

    具体的代码至少这几年是没指望了。

    举个栗子

    123456加密(32位)之后是

    e10adc3949ba59abbe56e057f20f883e

    压缩时先计算并储存,然后进行还原,从000000开始,然后再试,举例(只是个例子):还原出000001,之后再试,举例,还原出000003(现实中绝对不是这样)。以这样的顺序依次计算解密结果,直到算出123456时,电脑存储已经尝试的次数,与MD5值一并存储,完成压缩。

    解压时根据前面存储的尝试次数,重复还原文件内容,解压出文件。

    总结

    我知道这样压缩速度会很慢,不多它确实可以把很大的文件压缩到很小,至少可以用到某些场景,比如备份一整个系统盘或者数据盘,这样子可以剩下不少空间,不过这意味着我们需要极好的对比算法或者极大的RAM。这个想法几乎是在我听说MD5的时候就有了,我或许有点天真,但一直憋着,只有自己知道。这种感觉真的不舒服,来表达一下。也希望能为未来的压缩技术做点贡献吧,感谢你能读到这里!

    不过如果哪天真的有代码实现了我的想法,也不要忘记我哦!(手动滑稽)

    嘿嘿!你怎么知道下面还有?

    如果这篇文章上了主页或者出息了(我觉得不大可能),记得在评论区通知我!

  • 相关阅读:
    [读书笔记] 代码整洁之道(五): 系统
    [读书笔记] 代码整洁之道(四): 类
    [读书笔记] 代码整洁之道(三): 错误处理及边界接口处理
    [读书笔记] 代码整洁之道(二):对象和数据结构
    程序猿的书单
    selenium自动化-java-封装断言
    java环境变量详细配置步骤
    Selenium-java-TestNg-的运行
    quicktest Professional下载地址,无限制使用方法
    常用网站收集
  • 原文地址:https://www.cnblogs.com/TotoWang/p/md5_zip.html
Copyright © 2020-2023  润新知