【发布时间】:2013-05-07 10:24:23
【问题描述】:
我正在尝试开发一个可以将我的字符串更改为唯一整数值的系统,这意味着例如单词“account”的加密数值为 0891,并且没有其他单词可以转换为 0891相同的转换过程,它确实不但是需要能够将生成的整数转换回字符串。
同时会依赖于词的结构规则,意思是“准确”、“公告”等词的生成数大于0891,“a”、“算盘”、“缩写”等词" 将生成小于 0891 的数字。
此应用程序的用途类似于索引或主键。我不使用增量索引的原因是出于安全目的,并且是由于索引依赖于集合中的数据数量
(例如)
[0] A, [1] B, [2] C, [3] D, [4] E, [5] F
上面的字母都有对应的索引,E的索引是4
但是如果数据突然增加或减少然后排序
[0] A, [1] AA, [2] AAB, [3] C, [4] D, [5] DA, [6] DZ, [7] E, [8] F
E 现在的索引为 7
每个单词必须有一个唯一的独立整数等价物,并具有相应的权重。
我需要知道是否存在可以执行上述操作的算法。
任何帮助将不胜感激。
【问题讨论】:
-
除非您规定最大字长,否则这是不可能的。 (即使您确实规定了字长,我仍然不确定)。
-
我会开始说,如果你想要安全,你应该放弃对“词结构规则”的依赖。您已经为具有此类要求的攻击者简化了工作。
-
UmNyobe 所说的,加上你应该接受碰撞。索引通常会有冲突,只要它们是例外而不是规则,这没有什么问题。
-
请注意,如果您想将某物转换为其他物,并且没有返回原始值的选项,您指的是散列而不是加密。您的问题是,大多数散列算法都有可能为不同的输入返回相同的散列。尤其是如果输出必须是整数值;这很有可能。
-
@marcolopes:只有 2^32 个可能的整数哈希码。有超过 2^32 个可能的字符串,因此
String.hashCode()保证为多个字符串生成相同的哈希码。