math - 来自 32 位自动递增 INTEGER 的伪随机数

标签 math random

我在数据库中有一个带有自动递增 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/

相关文章:

python - 获取 sympy 解决方案的某些部分

math - 根据太阳位置(方位角和仰角)以及纬度和经度计算日期和时间

python - Google App Engine + PyCrypto =/dev/urandom 不可访问

java - 如何在Java中从数组中随机选取四个元素而不重复?

javascript - 最接近的值(捕捉)

algorithm - 是否可以从 Excel 中的多行中获取平均值?

algorithm - 一种使用位翻转迭代所有 k 位数字的算法

c++ - 具有内部随机函数的结构的 CUDA 移植

javascript - 在 JavaScript 中创建随机 SVG 曲线同时避免急转弯

python - 如何生成包含几个随机整数的列表?