我在数据库中有一个带有自动递增 32 位整数主键的表,它将生成 1-4294967295
范围内的数字。
我希望保持自动生成主键的便利性,同时让应用程序前端的数字看起来像是随机生成的。
是否有一个数学函数可以允许在一个整数和另一个整数之间进行双向一对一转换?
例如,一个函数将接受一个数字,并将其转换为另一个数字:
1 => 1538645623
2 => 2043145593
3 => 393439399
还有另一个函数:
1538645623 => 1
2043145593 => 2
393439399 => 3
我不一定在这里寻找实现,而是暗示我认为一定是某个地方众所周知的数学问题:)
最佳答案
从数学上讲,这几乎与密码学完全相同。
你:我想以一种不明显的方式从一个 id(位串)转到另一个数字(位串),然后再返回。 密码学:我想以一种不明显的方式从明文(位串)到另一个位串,然后再返回(可逆)。
因此,对于一个简单的解决方案,我是否可以建议插入您的语言中最方便的任何加密算法,并加密和解密您的 ID?
如果你想变得更聪明,除了密码学之外,你还可以做所谓的“加盐”。将您的 id 视为 32 位(或其他)数字。将其与随机 32 位数字连接。加密结果。要逆向,只需解密,并丢弃随机部分。
当然,如果有人严重攻击这一点,这可能容易受到已知明文/差分密码分析攻击,因为您的已知明文空间非常小,但听起来您并没有试图防御严重攻击。
关于math - 来自 32 位自动递增 INTEGER 的伪随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328812/