我有一个带有用户的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,但是将需要大多数人花费相当大的力气才能破解.