我有一系列代码的格式:
AA12345A1即:[a-z]{2}[0-9]{5}[a-z][0-9]
和
AA12345A123即:[a-z]{2}[0-9]{5}[a-z][0-9]{3}
我需要创建一个新的任何格式的“代码”,从上述任何一种格式到格式,以掩盖以1数字结尾的和以3个数字结尾的格式之间的区别(这向用户揭示了我需要隐藏的信息)。
新代码格式的约束条件是:
是否有合适的散列算法(或其他算法)来执行此操作,或者有人有任何建议使用自定义的方法来完成此操作?
谢谢
发布于 2010-09-29 12:04:11
混淆的一个非常简单的方法是:
。
然后,在使用时,您知道,如果第一个字符来自一半意思是9个字符,您可以丢弃最后两个数字。
但是,每一根字符串都会有12个字符。
发布于 2010-09-29 12:00:29
这里有一种可能性。
对于九个字符的代码,插入一个随机偶数字母(B,D,F,.)后面是第一个数字和两个随机数字的末尾。
对于十一个字符的代码,插入一个随机的奇数字母(A,C,E,.)在第一个数字之后,其余部分保持原样。
在这两种情况下,你也可以腐烂-13无噪音的阿尔法和腐-5的数字进一步改变代码,虽然我不确定这是必要的,你的目的。
这样,两种情况下你都会得到一个12个字符的代码,如果需要的话,你可以倒过来。这是人类的可读性和独特性。这不是像你说的那样,国家安全局级的密码,但它应该能挡住旁观者的视线。
如果您需要生成更确定的结果(即没有随机数)的散列,则可以使添加的内容依赖于输入数据。有一种方法,可能还有几百个。考虑这两种输入类型:
AB12345C6
AB12345C678在这两种情况下,仍然在1之后插入一个字符,但使其依赖于输入。将1、3和6位置的数字相加,然后取其中的模-10,得到0到9。
使用它来查找字符串"ABXVRWECPU“中的九位代码,或者查找"OIYJTQLSDK”中的11位代码来获取字符。然后,您可以在生成的代码中使用该字符来确定它最初是九个字符还是十一个字符的代码(真正的偏执者将确保这些字符串不会存储在代码中的明文中)。
对于要添加到第一种情况的两位数,将A、C的ASCII码和B的函数(例如,xor 'B‘和147)相加,然后将其加到64、51和23所形成的数字中。
取其中的模块87,然后添加7以得到介于7和93之间的值。
发布于 2010-09-29 11:58:27
您有两项任务:
表示。
因此,使用例如SHA1与原始字符串作为输入,并获得一个二进制结果。=>散列。从二进制哈希获取9(或11) *5位,并使用下表:
00000 -> "0“
00001 -> "1“
..。
01001 -> "9“
01010 -> "A“
..。
11111 -> "Z“
这张桌子没有用一些我能混淆的字母。"L“== "l”可能被不小心地读为"1";省略字母"Q“和"O”,因为你使用数字"0")。你需要10个数字加22个字符。
如果用户输入代码,将所有小写字母替换为大写字母,例如"l"/"L“替换为"1",因为这些字母必须是排字。如果可能的话,添加一个或两个字符作为校验和,这样您就可以检查其他类型的输入(将字符替换为字符)。因此,您可以在前端显示错误消息,而无需进行任何解码/数据库查找。
https://stackoverflow.com/questions/3821294
复制相似问题