以不明显方式递增字符串的算法

2022-09-03 00:03:05

我想创建随机的5或6个字符的字母数字字符串,如下所示:

Vg78KY

创建(伪)随机字符串已经得到回答,但我想知道是否有一种算法可以以不明显的方式递增字符串。上述字符串的简单增量可能会产生:

Vg78KZ

但是我不希望下一个字符串是可猜测的,我希望它看起来完全不同。当然,连续的增量不应产生先前的结果,因为每个结果都应该是唯一的。

关于如何实现这一点的任何想法都非常值得赞赏!

谢谢


答案 1

避免需要查找表的简单方法是:

  • 正常递增整数
  • 以一种不明显的方式置换位(固定排列可能很好,但如果你想要更复杂的东西,你可以使用像George Marsaglia的XORShift算法这样的东西,该算法产生一个仅在很长的周期后重复的整数序列)
  • 转换为 Base64 编码字符串

答案 2

如果我们假设必须有一个从“序列号”到“随机字符串”的1:1映射,那么截断的哈希方法将不起作用,因为不能保证截断的哈希不会受到冲突的影响。

我会做这样的事情:

  • 按顺序取下一个整数。
  • 具有固定编号的异或。
  • 将位置换。
  • 使用 Base64、Base36 或其他方式对数字进行编码。

请注意,这将受到具有足够大序列号集的确定的攻击者的轻松分析。