V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MeiganFang
V2EX  ›  编程

求 不定长度字符串 加密压缩成 固定长度字符串 的方法

  •  
  •   MeiganFang · 2016-01-29 09:41:47 +08:00 · 7212 次点击
    这是一个创建于 3219 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正文如题,请 V 友帮忙~~~

    25 条回复    2016-01-30 21:59:21 +08:00
    xenme
        1
    xenme  
       2016-01-29 09:45:20 +08:00 via iPhone
    参考 md5 类似的 hash
    otakustay
        2
    otakustay  
       2016-01-29 09:57:16 +08:00
    加密是不可能的,摘要是可以的,比如 md5
    xylophone21
        3
    xylophone21  
       2016-01-29 10:01:43 +08:00
    加密,上传云盘,得到 url

    除非“固定长度” >= 最大“不定长度”
    sherlocktheplant
        4
    sherlocktheplant  
       2016-01-29 10:06:27 +08:00
    找到一个最大长度 然后填 0 呗
    yeyeye
        5
    yeyeye  
       2016-01-29 10:10:07 +08:00
    @MeiganFang
    @xenme
    @otakustay
    @xylophone21
    @sherlocktheplant

    这不就是磁力链么……(磁力链,长度固定,而且很小,磁力链生成 BT 种子,再生成任意大小的文件)
    otakustay
        6
    otakustay  
       2016-01-29 10:12:42 +08:00
    @yeyeye 磁力链本身并不含有数据,数据是从其他地方检索的,即有存储存在

    你咋不说数据库主键也是个算法呢- -
    yeyeye
        7
    yeyeye  
       2016-01-29 10:17:36 +08:00
    @otakustay 不要太在意过程~ 在磁力链的基础上再加密一下,不就达到楼主要求的效果了么,既保密,又短小、
    seki
        8
    seki  
       2016-01-29 10:20:36 +08:00
    @yeyeye 但是你需要维护一个磁力链到内容的对应表,这个表丢了就哭哭了
    otakustay
        9
    otakustay  
       2016-01-29 10:21:39 +08:00
    @yeyeye 楼主的要求也没说清楚,比如是不是允许联网,是不是允许带个数据库,如果都不允许的话,磁力链这种方案就是残废的呗

    另外解密速度上的要求也要看,磁力链那种依赖网络 IO 的速度注定不能做大规模运算
    allan888
        10
    allan888  
       2016-01-29 10:24:23 +08:00
    @yeyeye 在意的就是这个过程。
    按照你这个思路,一个 map , key 是整数, value 是真实的数据,那岂不是把所有数据都加密成一个 int 长度了,这不叫加密也不叫压缩。。。。
    yeyeye
        11
    yeyeye  
       2016-01-29 10:29:17 +08:00
    @otakustay “不定长度字符串 加密压缩成 固定长度字符串 的方法”

    首先这个标题就是一个不会提问的人说出来的,你要达到它的要求,除非成为中国的佛主或者外国的上帝。

    世界上最小的数字是二进制的 0 和 1 ,占用最低了,如果再压缩成所谓的固定长度,你说怎么压,还需要加密……

    不往远了说,数字 1-10 ,怎样才能压缩到二进制的 1 位?



    也就是说不可能任何字符串都能压缩,甚至是压缩后还会变大。那选择多大作为存储的目标呢?(还要固定大小)

    为了安全,找一个地球一样大的星球来存储吧,既能保证足够存储下地球上的任何数据和大小,又能保证长度一致。
    yeyeye
        12
    yeyeye  
       2016-01-29 10:31:30 +08:00
    @allan888 一个固定长度就玩死了所有的方式关于压缩的部分,我在 11 楼说了,除非再找一个地球来存储这段数据,才能保证长度一致。实现其他目标。否则一个目标都完成不了。
    yeyeye
        13
    yeyeye  
       2016-01-29 10:33:21 +08:00
    @seki 用 BTSync 吧,多搞几个设备做同步,东西肯定不会丢。
    fising
        14
    fising  
       2016-01-29 10:34:35 +08:00
    违背自然规律
    allan888
        15
    allan888  
       2016-01-29 10:40:24 +08:00
    @yeyeye 把短的加密成长的字符串当然是可以的,具体怎么做就不说了,哪怕是填充 0 也是可行的。
    然后如果知道压缩后的最大长度,那就没问题了,字符串压缩后,不够的就填充一下。
    如果不知道,也可以在每次新来一个字符串,然后压缩后比之前的要长的情况下去填充以前的所有压缩后的字符串。
    所以工程上压根就没有所谓的地球那么大,实际操作上,比如一篇文章或者一个标题,还可能一开始就限制长度。
    你说的办法当然也是个思路,但是直接扯地球佛祖啥的一点意思也没有。
    jugelizi
        16
    jugelizi  
       2016-01-29 10:42:55 +08:00   ❤️ 1
    加密 压缩 定长
    这是产品经理提出来的吗
    allan888
        17
    allan888  
       2016-01-29 10:44:15 +08:00
    @yeyeye 当然我认为你说的都是解决办法。
    但是其实我觉得“加密”成一个长度的话,很多情况下都做得到,比如对于比如文章标题这种加密。
    loading
        18
    loading  
       2016-01-29 10:44:37 +08:00 via Android
    楼主,如果是用于密码验证,是不需要这样的,请说下你的用途。
    yeyeye
        19
    yeyeye  
       2016-01-29 10:53:01 +08:00
    @allan888 所以楼主只是脑洞大开一下……不要在纠结了,你说的那些懂的人都懂。扯地球佛主没意义,但是这个主题其实更没意义。所以我也是继续开脑洞

    @jugelizi 哈哈,逻辑不完善就是这样

    @loading 楼主估计也就是开下脑洞。
    yougg
        20
    yougg  
       2016-01-29 11:11:37 +08:00
    需求描述不明确.

    不定长度字符串 的上下边界是多少?
    固定长度字符串 的长度又是多少?

    1B 和 1TB 的字符串 能同时满足加密压缩至 1MB 吗?
    nealnote
        21
    nealnote  
       2016-01-29 11:14:59 +08:00
    摘要算法

    CRC8, CRC16, CRC32
    MD2, MD4, MD5
    SHA1, SHA256, SHA384, SHA512
    RIPEMD, PANAMA, TIGER, ADLER32
    monnand
        22
    monnand  
       2016-01-29 15:25:39 +08:00 via Android
    假设存在这个算法,那么这不仅仅是一个牛逼的加密算法(楼主说的可是加密算法,即可以再无损地恢复原文,即解密),而且是一个超级牛逼的压缩算法。简单说,这个问题图灵不可解
    pljhonglu
        23
    pljhonglu  
       2016-01-29 16:57:48 +08:00
    标题不可实现
    楼主还是说说要用来干什么吧~
    MeiganFang
        24
    MeiganFang  
    OP
       2016-01-30 11:55:23 +08:00
    感谢诸位 V 友的回答,@pljhonglu 主要是为了进行两段文本字符串的比较,出于大文本网络流量占用大的考虑,想通过压缩之后字符串(固定长度)提交 server 做比对。
    pljhonglu
        25
    pljhonglu  
       2016-01-30 21:59:21 +08:00   ❤️ 1
    @MeiganFang 这种叫做摘要算法, MD5 , SHA1 等都可以,但是服务器无法解出原文。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3243 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.