gpt4 book ai didi

algorithm - 哈希的双射模拟

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:56 25 4
gpt4 key购买 nike

从 0 到 M 的整数将被映射到 n 字符代码,由某个字母表组成。棘手的部分是代码应该看起来是伪随机的、非连续的。像这样:

0    BX07SU
1 TYN9RQ
2 QZ1697

我认为这是我错过的常识性文章。他们如何调用这种类型的函数 f(i) = s - 将一个整数映射到一个伪随机字符串,在一定范围内没有冲突?

反向函数也很棒:h(s) = i,能够将有效字符串“解码”回整数,或确定提供的字符串无效。

最佳答案

对于小型 M @user1494736 是正确的:只需制作一个恰好是双射的查找表,并根据您的需要对其进行定制。

对于大的 M 存储表变得不切实际;我们需要一种算法来计算映射。您提到我们不需要强大的密码学;这使我们可以自由选择比标准密码更轻量级的密码。也就是说,它们非常快,我希望您可以轻松地将它们与第 3 方库一起使用。但假设您出于某种原因更愿意避免这种情况。

制作穷人密码的一种方法是将一个常量异或到您的明文(以更改汉明权重),然后应用位排列(以破坏局部性。)这两个步骤是可逆的。听起来您想将密码字母显示为 ASCII。因此,我们可能需要一个最终的可逆变换(加法)来确保密码值是可打印的。

您提到 M 可能大到几百万。因此,让我们将明文字母(以及密文字母)设为 32 位值。为 xor 找到一个随机的 32 位值很容易。位排列怎么样?

几百万个明文字母转换为每个字母大约 2223 位宽;这至少会在每个明文字母中清除 8(逻辑)高位。排列可以利用这一点来帮助确保密文字节在 ASCII 可打印范围内。通过将该高明文字节发送到四个密码字节中每个密码字节的高两位,我们确保每个密码字节取值 063。然后,最后一步可以添加 48 以使范围从 48111,完全在 ASCII 可打印范围内。

根据这一观察结果,我们可以将明文字母设想为位对的 4x4 网格,并使我们的排列成为该网格的旋转:

Plain

A B C D byte 3 (the high byte, expected to be all 0)
E F G H byte 2
I J K L byte 1
M N O P byte 0

Cipher

D H L P byte 3
C G K O byte 2
B F J N byte 1
A E I M byte 0

或者换句话说:

Byte       3    2    1    0
Plain ABCD EFGH IJKL MNOP
Cipher DHLP CGKO BFJN AEIM

请注意,每个明文字节的一部分出现在每个密文字节中:这将确保编码“看起来是随机的”。

关于algorithm - 哈希的双射模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com