首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何唯一地散列/混淆9-11个字符?

如何唯一地散列/混淆9-11个字符?
EN

Stack Overflow用户
提问于 2010-09-29 11:48:02
回答 3查看 569关注 0票数 2

我有一系列代码的格式:

代码语言:javascript
复制
AA12345A1

即:[a-z]{2}[0-9]{5}[a-z][0-9]

代码语言:javascript
复制
AA12345A123

即:[a-z]{2}[0-9]{5}[a-z][0-9]{3}

我需要创建一个新的任何格式的“代码”,从上述任何一种格式到格式,以掩盖以1数字结尾的和以3个数字结尾的格式之间的区别(这向用户揭示了我需要隐藏的信息)。

新代码格式的约束条件是:

  • 他们需要是人类可用的(所以用大写字母和小写字母是个坏主意

是否有合适的散列算法(或其他算法)来执行此操作,或者有人有任何建议使用自定义的方法来完成此操作?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-29 12:04:11

混淆的一个非常简单的方法是:

  • 偷偷地随机挑选一半字母表来表示9个字符,另一半表示11个字符。
  • 准备了一个随机字母从适当的一半到字符串(如果是9个字符字符串的话)
  • ,如果字符串是9个字符,则追加2个随机数字

然后,在使用时,您知道,如果第一个字符来自一半意思是9个字符,您可以丢弃最后两个数字。

但是,每一根字符串都会有12个字符。

票数 2
EN

Stack Overflow用户

发布于 2010-09-29 12:00:29

这里有一种可能性。

对于九个字符的代码,插入一个随机偶数字母(B,D,F,.)后面是第一个数字和两个随机数字的末尾。

对于十一个字符的代码,插入一个随机的奇数字母(A,C,E,.)在第一个数字之后,其余部分保持原样。

在这两种情况下,你也可以腐烂-13无噪音的阿尔法和腐-5的数字进一步改变代码,虽然我不确定这是必要的,你的目的。

这样,两种情况下你都会得到一个12个字符的代码,如果需要的话,你可以倒过来。这是人类的可读性和独特性。这不是像你说的那样,国家安全局级的密码,但它应该能挡住旁观者的视线。

如果您需要生成更确定的结果(即没有随机数)的散列,则可以使添加的内容依赖于输入数据。有一种方法,可能还有几百个。考虑这两种输入类型:

代码语言:javascript
复制
AB12345C6
AB12345C678

在这两种情况下,仍然在1之后插入一个字符,但使其依赖于输入。将136位置的数字相加,然后取其中的模-10,得到0到9。

使用它来查找字符串"ABXVRWECPU“中的九位代码,或者查找"OIYJTQLSDK”中的11位代码来获取字符。然后,您可以在生成的代码中使用该字符来确定它最初是九个字符还是十一个字符的代码(真正的偏执者将确保这些字符串不会存储在代码中的明文中)。

对于要添加到第一种情况的两位数,将A、C的ASCII码和B的函数(例如,xor 'B‘和147)相加,然后将其加到64、51和23所形成的数字中。

取其中的模块87,然后添加7以得到介于7和93之间的值。

票数 3
EN

Stack Overflow用户

发布于 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",因为这些字母必须是排字。如果可能的话,添加一个或两个字符作为校验和,这样您就可以检查其他类型的输入(将字符替换为字符)。因此,您可以在前端显示错误消息,而无需进行任何解码/数据库查找。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3821294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档