2 回答
TA贡献1780条经验 获得超4个赞
我认为更改 ID 的基数并添加偏移量可以为您提供一种混淆 ID 的好方法。像这样的东西:
function obfuscate($number)
{
$offset = 12345678;
return strtoupper(base_convert($number + $offset, 10, 36));
}
function deobfuscate($code)
{
$offset = 12345678;
return base_convert($code, 36, 10) - $offset;
}
这里1将成为7CLZJ并且9999将成为7CTP9。代码保证是唯一的。通过转换为基数 36,代码将只包含数字 0...9 和字母 A....Z。
简单但有效。请$offset在您的班级中创建一个字段。
这只会让您远离 id 的简单数字,它对保护 id 毫无帮助。
如果您认为基数为 36 的序列号有问题,您可以添加一个因子。例如质数5197。像这样:
function obfuscate($number)
{
$offset = 73074643;
$factor = 5197;
return strtoupper(base_convert($factor * $number + $offset, 10, 36));
}
function deobfuscate($code)
{
$offset = 73074643;
$factor = 5197;
return intdiv(base_convert($code, 36, 10) - $offset, $factor);
}
这将使在编号中看到任何逻辑变得更加困难:
1 = 17ICRK
2 = 17IGRX
3 = 17IKSA
4 = 17IOSN
5 = 17IST0
TA贡献1847条经验 获得超7个赞
Base64 编码的值仍然很容易识别。
您可以创建 ID 的散列,例如$hash = hash('crc32', $input);
,但更好的主意是生成 UUID,例如$uuid = uniqid();
并使用它而不是 ID
- 2 回答
- 0 关注
- 154 浏览
添加回答
举报