如何使用salt/password将整数加密为另一个整数


How to encrypt integer to another integer with salt/password?

我试图通过将整数加密为另一个整数,使其看起来随机,来向用户隐藏数据库自动递增的ID(1到PHP_INT_MAX)。

我考虑过做XOR

$mySecretNumber = 123456789;
$idToHide = 10;
$encryptedId = ($idToHide ^ $mySecretNumber);

但是(我认为)这个秘密号码很容易就能算出。

如何使用更安全的方法来指定salt/password?

编辑

为了清楚起见,我需要(看似随机)将1到PHP_INT_MAX范围内的一个整数映射到同一范围内的另一个整数。

您是否试图混淆ID号,例如在URL中使用加密是"URL参数obfseducation"作业的错误工具

使用单独的随机值并保持服务器端查找"随机值"<->"integer"而不是加密。

除非你是一名密码学工程师,多年来一直在破解加密软件(大多数在Stack Overflow上问这类问题的人都不是),否则你应该避免像瘟疫一样实施密码学。你几乎肯定会在学到足够的知识之前编写易受攻击的代码。

另请参阅:编写加密代码!不要发布!

ECB模式下的任何对称加密都可以做到,只要块大小为64位,并且密钥大小足够大,例如TDES为112或AES为128,但结果的范围将是完整的64位。但技经评估被认为是薄弱的,因此不适合。

我使用TEA加密算法(64位分组密码)解决了这个问题。

请注意,范围不是从1到PHP_INT_MAX,而是从PHP_INT_MIN到PHP_INT_MAX(对于64位PHP)。

如果你认为我的方法有什么问题,请告诉我。

此外,我发现了两个非常有用的主题:混淆ID,整数的对称双目标算法

编辑

我之所以选择TEA算法,只是因为它简单快捷,安全性不是一个重要的优先事项。