我正在尝试通过将整数加密到另一个整数来隐藏数据库自动递增的ID(1到PHP_INT_MAX),使其看起来是随机的。
我考虑过做XOR
$mySecretNumber = 123456789;
$idToHide = 10;
$encryptedId = ($idToHide ^ $mySecretNumber);
但是(我认为)秘密号码很容易理解。
如何使用更安全的方法来指定盐/密码?
修改
要清楚,我需要(看似随机地)将1到PHP_INT_MAX范围内的整数映射到同一范围内的另一个整数。
答案 0 :(得分:1)
您是否试图对ID号进行模糊处理,例如用于URL?的 Encryption is the wrong tool for the "URL paremeter obfsucation" job 强>
使用单独的随机值并维护服务器端查找“随机值”< - >“整数”而不是加密。
除非你是一位多年来打破加密软件的加密工程师(大多数人都不会在Stack Overflow上问这些问题),否则你应该避免像瘟疫那样实施加密技术。在你学到足够的知识之前,你几乎肯定会编写易受攻击的代码。
答案 1 :(得分:0)
我通过使用TEA加密算法(64位分组密码)解决了这个问题。
请注意,范围不是从1到PHP_INT_MAX,而是从PHP_INT_MIN到PHP_INT_MAX(对于64位PHP)。
如果您认为我的方法有任何错误/不好,请告诉我。
另外,我发现了2个非常有用的主题: Obfuscating an ID, Symmetric Bijective Algorithm for Integers
修改
我选择TEA算法只是因为它简单快速,安全性不是一个重要的优先事项。
答案 2 :(得分:0)
ECB模式下的任何对称加密都可以,只要块大小为64位且密钥大小足够大,例如TDES为112或AES为128,但结果范围为全64位。但TEA被认为是弱的,因此不合适。