寻找一种简单的方法将整数ID映射到大小不变的,混淆的,更长的(非顺序)整数

时间:2019-06-19 14:55:35

标签: php math encryption cryptography numbers

想要通过说这绝对不是一个安全的系统来开头这一点,并且目标是在可逆的同时进行混淆。首先,我们将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;

1 个答案:

答案 0 :(得分:1)

您正在寻找format-preserving encryption

似乎有only one PHP library that provides this,但我没有机会对其安全性或正确性进行审查。如有疑问:请雇用密码学家。

但是,只有在您非常具体的约束条件下,这才有意义!

  

计划是让用户在电话系统上输入此号码(因此,输出号码较小很重要),但也不清楚号码是否以任何方式都是连续的。

希望从更一般的意义上混淆ID或加密URL参数的任何人,should refer to this answer代替。