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

Ben*_*min 3 random math

我有一个表,在数据库中有一个自动递增的32位整数主键,它将生成数字范围1-4294967295.

我想保留自动生成的主键的便利性,同时在应用程序的前端使用我的数字看起来像是随机生成的.

是否存在允许在整数与另一个之间进行双向一对一转换的数学函数?

例如,函数将获取一个数字,并将其转换为另一个:

1 => 1538645623
2 => 2043145593
3 =>  393439399
Run Code Online (Sandbox Code Playgroud)

还有另一种功能:

1538645623 => 1
2043145593 => 2
 393439399 => 3
Run Code Online (Sandbox Code Playgroud)

我不一定在这里寻找一个实现,而是暗示我想的,必须是一个众所周知的数学问题:)

Nic*_*cue 6

在数学上,这几乎与密码学完全相同.

你:我想从一个id(比特串)转到另一个数字(比特串),并以非显而易见的方式再次返回.密码学:我想以明显的方式从明文(位串)转换到另一串位并再次返回(可逆).

因此,对于一个简单的解决方案,我是否可以建议只插入您的语言中最方便的加密算法,并加密和解密您的ID?

如果你想要有点聪明,除了加密之外,你可以做所谓的"腌制".把你的id作为32位(或其他)数字.用随机的32位数字连接它.加密结果.要反转,只需解密,然后扔掉随机部分.

当然,如果有人严重攻击这个,那么这可能容易受到已知的明文/差分密码分析攻击的影响,因为你有一个非常小的已知明文空间,但听起来你并没有试图抵御严重的攻击.