2 回答

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為更改 ID 的基數(shù)并添加偏移量可以為您提供一種混淆 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。代碼保證是唯一的。通過轉(zhuǎn)換為基數(shù) 36,代碼將只包含數(shù)字 0...9 和字母 A....Z。
簡單但有效。請(qǐng)$offset在您的班級(jí)中創(chuàng)建一個(gè)字段。
這只會(huì)讓您遠(yuǎn)離 id 的簡單數(shù)字,它對(duì)保護(hù) id 毫無幫助。
如果您認(rèn)為基數(shù)為 36 的序列號(hào)有問題,您可以添加一個(gè)因子。例如質(zhì)數(shù)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);
}
這將使在編號(hào)中看到任何邏輯變得更加困難:
1 = 17ICRK
2 = 17IGRX
3 = 17IKSA
4 = 17IOSN
5 = 17IST0

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
Base64 編碼的值仍然很容易識(shí)別。
您可以創(chuàng)建 ID 的散列,例如$hash = hash('crc32', $input);
,但更好的主意是生成 UUID,例如$uuid = uniqid();
并使用它而不是 ID
- 2 回答
- 0 關(guān)注
- 187 瀏覽
添加回答
舉報(bào)