php-将自动递增ID转换为9位随机序列号

我有一个带有用户的MySQL数据库.每行都有一个唯一的自动增量ID(1,2,3 …).现在,我需要将其转换为唯一且随机的序列号,我可以将其转换回ID-全部使用PHP.

用户ID从1到99999999999(INT(11)).

所有序列号均应至少包含9位数字,且切勿以0开头.
用户应该不容易发现如何猜测有效的序列号.

谢谢 :)

解决方法:

您可以进行一些简单的“加密”.取一个(“秘密”)素数p 27407和基数17(例如).计算基模p-1的乘法逆inv,即12897.wolframalpha可以为您做到这一点.

ID到序列号

serial = id^base mod p
serial = 42^17 % 27407 = 24978

序列号到ID

id = serial^inv mod p
id = 24978^12897 % 27407 = 42

可以通过exponentiation bysquaring快速计算出来.只能使用0到27407之间的ID(如果不够,请使用更大的质数),并且所有ID都具有唯一的可逆序列号.

为了增加模糊度,您可以将结果与某些值进行XOR.

这不是真正的密码学,只是愚蠢的security through obscurity,但是将需要大多数人花费相当大的力气才能破解.

上一篇:加密地穴-尝试以与Perl相同的方式在PHP中工作


下一篇:android-具有离线访问和本地安全性以及跨平台功能的Google Drive / Dropbox之类的解决方案