我有以下格式的一系列代码:
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个数字结尾的那些之间的差异(这向用户显示我需要的信息)隐藏)。
新代码格式的约束是:
是否有任何合适的哈希(或其他)算法来执行此操作,或者是否有人建议采用自定义方式执行此操作?
由于
答案 0 :(得分:3)
这是一种可能性。
对于九个字符的代码,在第一个数字后插入一个随机偶数字母(B,D,F,...),最后插入两个随机数字。
对于十一个字符的代码,在第一个数字后插入一个随机的奇数字母(A,C,E,...),其余部分保持不变。
在这两种情况下,你也可以ROT-13非噪音alphas和ROT-5数字进一步改变代码,虽然我不确定你的目的是否必要。
这样你最终得到了两个案例的十二个字符代码,如果需要你可以反转。它具有人类可读性和独特性。正如你所说,它不是NSA级别的加密,但它应该阻止随便的旁观者。
如果您需要一个产生更确定结果的哈希值(即没有随机数),您可以根据输入数据添加添加的内容。这是一种方式,可能还有数百种。考虑两种输入类型:
AB12345C6
AB12345C678
在两种情况下仍然在1
之后插入一个字符,但要使其依赖于输入。在位置1
,3
和6
上添加数字,并取其中的模数10得到0到9。
使用它作为查找字符串“ABXVRWECPU”获取九位数代码或“OIYJTQLSDK”获取11位数代码来获取角色。然后,您可以在结果代码中使用该字符来确定它最初是9个字符还是11个字符的代码(真正的偏执会确保这些字符串不会以明文形式存储在代码中)。
对于要添加到第一种情况的两位数字,将A,C的函数和B的函数相加(例如,xor'B'和147),然后将其添加到由64形成的数字中, 51和23。
取模8的模数然后加7得到7到93之间的值。
答案 1 :(得分:2)
一种非常简单的混淆方法是:
然后,在使用时,你知道如果第一个字符来自半个意思是9个字符,你可以丢弃最后两个数字。
你最终会为每个字符串添加12个字符。
答案 2 :(得分:0)
您有两项任务:
所以使用例如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”,因为这些必须是拼写错误。如果可能,添加另外一个或两个字符作为校验和,以便您可以检查其他拼写错误(交换到字符)。因此,您可以在前端显示错误消息,而无需进行任何解码/数据库查找。