整数的基本混淆算法
Basic obfuscation algorithm for integer
我正在寻找某种混淆双向算法,它将整数(在一个范围内,如 [0 , 2^10]
)映射到一个字符串,以避免 URL 操纵
我看到 建议生成随机字符串并将其用作 ID,但我需要将此字符串与现有数据相关联,我不认为这是可扩展的,因为我会必须为 400k 条目生成字符串...此外,我无法加密它,因为我需要将其存储在 NFC 标签中,因此内存非常有限
目前,我正在将 int 转换为 UUID,但最终,这会改变任何东西,它只是带有一些 0 作为填充的 int 值
有这样的吗?
使用原因是:
mywebsite.com/something/1
# becomes
mywebsite.com/something/{string n char long}
在哪里我可以将该字符串转换为 int 以及其他方式,因此没有“简单的方法”让某人去 mywebsite.com/something/2
我只是需要一个想法,但是如果有人在 PHP 中已经有了这样的东西,谢谢
如评论中所述,默默无闻并不安全。但是,这里有一个很容易逆转的想法:
转换为 36 进制(或者可能 35 进制更难预测)
function obfuscate(int $id) : ?string
{
return $id
? strtolower(str_pad(base_convert($id, 10, 36),4,'0', STR_PAD_LEFT))
: null;
}
function unobfuscate(?string $code) : ?int
{
return $code
? base_convert($code, 36, 10)
: null;
}
$numbers = [0,1,2,3,4,200,400,560,1000,1234567];
$obscure = [];
foreach($numbers as $number) {
$obscure[] = obfuscate($number);
print obfuscate($number) . "\n";
}
foreach($obscure as $code) {
print unobfuscate($code) . "\n";
}
// yields:
0001
0002
0003
0004
005k
00b4
00fk
00rs
qglj
1
2
3
4
200
400
560
1000
1234567
要进一步混淆它,您可以在开头或结尾添加随机诱饵 letters/numbers。 (我会让你弄清楚这方面的细节)
不过请注意,您最终可能会得到一些不适合家庭使用的网址 ;)
这里的工作示例:
http://sandbox.onlinephpfunctions.com/code/d16a81c9e07c5e26ed4045d6363bbe41763470f0
我忍不住...这里有 26 个字符的工作示例:
http://sandbox.onlinephpfunctions.com/code/61c919b7e294fa96377f2fe0edddb874a9a4b9ba
我正在寻找某种混淆双向算法,它将整数(在一个范围内,如 [0 , 2^10]
)映射到一个字符串,以避免 URL 操纵
我看到
目前,我正在将 int 转换为 UUID,但最终,这会改变任何东西,它只是带有一些 0 作为填充的 int 值
有这样的吗?
使用原因是:
mywebsite.com/something/1
# becomes
mywebsite.com/something/{string n char long}
在哪里我可以将该字符串转换为 int 以及其他方式,因此没有“简单的方法”让某人去 mywebsite.com/something/2
我只是需要一个想法,但是如果有人在 PHP 中已经有了这样的东西,谢谢
如评论中所述,默默无闻并不安全。但是,这里有一个很容易逆转的想法:
转换为 36 进制(或者可能 35 进制更难预测)
function obfuscate(int $id) : ?string
{
return $id
? strtolower(str_pad(base_convert($id, 10, 36),4,'0', STR_PAD_LEFT))
: null;
}
function unobfuscate(?string $code) : ?int
{
return $code
? base_convert($code, 36, 10)
: null;
}
$numbers = [0,1,2,3,4,200,400,560,1000,1234567];
$obscure = [];
foreach($numbers as $number) {
$obscure[] = obfuscate($number);
print obfuscate($number) . "\n";
}
foreach($obscure as $code) {
print unobfuscate($code) . "\n";
}
// yields:
0001
0002
0003
0004
005k
00b4
00fk
00rs
qglj
1
2
3
4
200
400
560
1000
1234567
要进一步混淆它,您可以在开头或结尾添加随机诱饵 letters/numbers。 (我会让你弄清楚这方面的细节)
不过请注意,您最终可能会得到一些不适合家庭使用的网址 ;)
这里的工作示例: http://sandbox.onlinephpfunctions.com/code/d16a81c9e07c5e26ed4045d6363bbe41763470f0
我忍不住...这里有 26 个字符的工作示例: http://sandbox.onlinephpfunctions.com/code/61c919b7e294fa96377f2fe0edddb874a9a4b9ba