前言
在當(dāng)今數(shù)字化時(shí)代,數(shù)據(jù)的安全性和隱私性至關(guān)重要。隨著網(wǎng)絡(luò)應(yīng)用的不斷發(fā)展,數(shù)字 ID 作為數(shù)據(jù)標(biāo)識和訪問控制的關(guān)鍵元素,其保護(hù)顯得尤為重要。然而,傳統(tǒng)的數(shù)字 ID 往往直接暴露了一些敏感信息,如順序編號或數(shù)據(jù)庫主鍵ID,這不僅增加了數(shù)據(jù)泄露的風(fēng)險(xiǎn),還可能讓不法分子有機(jī)可乘。
?在 .NET 中使用 Sqids 快速的為數(shù)字 ID 披上神秘短串,從而輕松隱藏敏感數(shù)字,保護(hù)數(shù)據(jù)安全。
Sqids 介紹
Sqids 是一個(gè)基于 C# 編寫、開源的輕量級工具庫,它允許你從數(shù)字生成類似 YouTube 的 ID。它可以將數(shù)字(如 127)編碼為字符串(如 yc3),然后你可以將這些字符串解碼回原始數(shù)字。當(dāng)你想要將數(shù)字(如順序數(shù)值 ID)混淆為看似隨機(jī)的字符串,以便在 URL 和其他地方使用時(shí),Sqids 就非常派得上用場。
功能特點(diǎn)
- Sqids 生成的 ID 是唯一的,并且始終可以解碼回原始數(shù)字。
- 可以將多個(gè)數(shù)字捆綁成一個(gè) ID,然后可以將該 ID 解碼回相同的數(shù)字集。
- Sqids 生成的 ID 確保不包含常見的臟話,因此您可以在用戶可以看到的地方安全地使用這些 ID(例如在 URL 中)。
- .NET 7 及以上版本支持所有整數(shù)類型(如 int、long、byte、short 等),而舊版本僅支持 int。
- 采用基于 span 的優(yōu)化實(shí)現(xiàn),最小化內(nèi)存分配并最大化性能。
創(chuàng)建一個(gè)控制臺應(yīng)用
首先我們創(chuàng)建一個(gè)名為:SqidsExercise
的 .NET 9 控制臺應(yīng)用:


安裝 Sqids NuGet 包
在 NuGet 包管理器中搜索 Sqids
安裝:

簡單使用示例
internal class Program
{
static void Main(string[] args)
{
// 使用默認(rèn)選項(xiàng)創(chuàng)建 SqidsEncoder 實(shí)例
var sqids = new SqidsEncoder<int>();
// 編碼單個(gè)數(shù)字
var id = sqids.Encode(99);
Console.WriteLine($"編碼單個(gè)數(shù)字: {id}"); // 輸出:Q8P
// 解碼單個(gè) ID
var number = sqids.Decode(id).Single();
Console.WriteLine($"解碼單個(gè) ID '{id}': {number}"); // 輸出:99
// 編碼多個(gè)數(shù)字
var ids = sqids.Encode(7, 8, 9);
Console.WriteLine($"編碼多個(gè)數(shù)字 7, 8, 9: {ids}"); // 輸出:ylrR3H
// 解碼多個(gè) ID
var numbers = sqids.Decode(ids);
Console.WriteLine($"解碼多個(gè) ID '{ids}': {string.Join(", ", numbers)}"); // 輸出:7, 8, 9
// 使用自定義選項(xiàng)創(chuàng)建 SqidsEncoder 實(shí)例
var customSqids = new SqidsEncoder<int>(new SqidsOptions
{
Alphabet = "mTHivO7hx3RAbr1f586SwjNnK2lgpcUVuG09BCtekZdJ4DYFPaWoMLQEsXIqyz",//自定義字母表(注意:字母表至少需要 3 個(gè)字符)
MinLength = 5,//最小長度,默認(rèn)情況下,Sqids 使用盡可能少的字符來編碼給定的數(shù)字。但是,如果你想讓你的所有 ID 至少達(dá)到一定的長度(例如,為了美觀),你可以通過 MinLength 選項(xiàng)進(jìn)行配置:
BlockList = { "whatever", "else", "you", "want" } //自定義黑名單,Sqids 自帶一個(gè)大的默認(rèn)黑名單,這將確保常見的詛咒詞等永遠(yuǎn)不會出現(xiàn)在您的 ID 中。您可以像這樣向這個(gè)默認(rèn)黑名單添加額外項(xiàng):
});
// 使用自定義 SqidsEncoder 編碼和解碼
var customId = customSqids.Encode(8899);
Console.WriteLine($"使用自定義 SqidsEncoder 編碼: {customId}"); // 輸出:i1uYg
var customNumber = customSqids.Decode(customId).Single();
Console.WriteLine($"使用自定義 SqidsEncoder 解碼: {customNumber}"); // 輸出:8899
}
}
項(xiàng)目源碼地址
更多項(xiàng)目實(shí)用功能和特性歡迎前往項(xiàng)目開源地址查看??,別忘了給項(xiàng)目一個(gè)Star支持??。
轉(zhuǎn)自https://www.cnblogs.com/Can-daydayup/p/18867416
該文章在 2025/5/9 8:55:51 編輯過