想要通过说这绝对不是一个安全的系统来开头这一点,并且目标是在可逆的同时进行混淆。首先,我们将ID编号从1到70000自动递增。计划是让用户在电话系统上输入此号码(因此,使输出号码较小非常重要),但也不清楚这些号码以任何方式都是连续的。 ID编号最高将为6位数字,因此我们正在考虑将每个“映射”都映射为7位数字。
希望做到这一点,以便输出看起来像这样:
1 -> 3041953
2 -> 1949921
3 -> 8541230
(换句话说,输出绝不是顺序的)
我们不能直接在任何类型的数据库中“映射”这些现有数字(因为a)信息遍及整个地方,b)“输入”这些数字的地方也遍布整个地方,因此插入后无法实现任何单一代码。
它必须是数字,必须易于反转,并且还必须具有一致的长度输出。
将使用PHP在输入和输出之间来回生成。我只是尝试了一些基本的数学运算(但无法让它看起来像“随机”)。我最接近的是做一些乘法运算,然后用我需要的大小执行XOR。但是,这仍然会导致顺序出现数字。
$xor= 8593473;
$originalID = rand(1,70000);
$result = ($originalID * 37) ^ $xor;
答案 0 :(得分:1)
您正在寻找format-preserving encryption。
似乎有only one PHP library that provides this,但我没有机会对其安全性或正确性进行审查。如有疑问:请雇用密码学家。
但是,只有在您非常具体的约束条件下,这才有意义!
计划是让用户在电话系统上输入此号码(因此,输出号码较小很重要),但也不清楚号码是否以任何方式都是连续的。
希望从更一般的意义上混淆ID或加密URL参数的任何人,should refer to this answer代替。