我有一个非常大的12-14位整数,我想将其加密/压缩为一个字母数字值,以便以后可以从字母数字值中恢复该整数。我尝试使用62个基来转换这个整数,并试图将这些值映射到a-zA-Z0-9,但是由此生成的值有7个字符长。这个长度仍然足够长,我想转换为大约4-5个字符。
是否有一种一般的方法可以这样做,或者某种方法可以这样做,以便恢复整数仍然是可能的?我在这里询问数学方面的问题,但是我会用php编写这个程序,我最近开始用PHP编程。
编辑:
我在考虑如何分配一个掩蔽位,并以一种方式使用它来生成更少的字符。我意识到这样一个事实,范围是不够的,这就是为什么我专注于使用一个数学技巧或一种表示方式。这62个基地是一个想法,我已经申请,但没有发挥作用。
发布于 2013-11-20 23:57:20
使用95个可打印的ASCII字符,您可以切换到基本95编码,而不是62个:
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~这样,长度为X的整数字符串可以压缩为长度为Y的基本95字符串,其中
Y = X * log 10/ log 95 = roughly X / 2这是相当好的压缩。所以从12到6。如果压缩的目的是通过使用JSON节省带宽,那么基92可以是很好的选择(不包括在JSON中转义的",\,/ )。
当然,您可以得到更好的压缩,但代价是一个更大的字母表。只需用符号数替换上面公式中的95。
当然,除非你知道整数的结构。例如,如果它们有大量的零,您可以基于这些知识进行压缩,以获得更好的结果。
发布于 2013-10-11 10:02:29
因为鸽子原则,你最终会得到一些被压缩的值,还有一些被扩展的值。根本不可能创建压缩算法来压缩每个可能的输入字符串(在您的情况下,您的数字)。
如果强迫输出集的基数小于输入集的基数,则会出现冲突(即,更多输入字符串被“压缩”到同一压缩二进制字符串)。压缩算法应该是可逆的,对吗?:)
https://stackoverflow.com/questions/19314445
复制相似问题