在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!
前言
在当今数字化时代,数据的安全性和隐私性至关重要。随着网络应用的不断发展,数字 ID 作为数据标识和访问控制的关键元素,其保护显得尤为重要。然而,传统的数字 ID 往往直接暴露了一些敏感信息,如顺序编号或数据库主键ID,这不仅增加了数据泄露的风险,还可能让不法分子有机可乘。
本文大姚将带领大家在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,从而轻松隐藏敏感数字,保护数据安全。
Sqids 介绍
Sqids 是一个基于 C# 编写、开源的轻量级工具库,它允许你从数字生成类似 YouTube 的 ID。它可以将数字(如 127)编码为字符串(如 yc3),然后你可以将这些字符串解码回原始数字。当你想要将数字(如顺序数值 ID)混淆为看似随机的字符串,以便在 URL 和其他地方使用时,Sqids 就非常派得上用场。
功能特点
- Sqids 生成的 ID 是唯一的,并且始终可以解码回原始数字。
- 可以将多个数字捆绑成一个 ID,然后可以将该 ID 解码回相同的数字集。
- Sqids 生成的 ID 确保不包含常见的脏话,因此您可以在用户可以看到的地方安全地使用这些 ID(例如在 URL 中)。
- .NET 7 及以上版本支持所有整数类型(如 int、long、byte、short 等),而旧版本仅支持 int。
- 采用基于 span 的优化实现,最小化内存分配并最大化性能。
创建一个控制台应用
首先我们创建一个名为:SqidsExercise 的 .NET 9 控制台应用:


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

简单使用示例
internal class Program
{
static void Main(string[] args)
{
// 使用默认选项创建 SqidsEncoder 实例
var sqids = new SqidsEncoder<int>();
// 编码单个数字
var id = sqids.Encode(99);
Console.WriteLine($"编码单个数字: {id}"); // 输出:Q8P
// 解码单个 ID
var number = sqids.Decode(id).Single();
Console.WriteLine($"解码单个 ID '{id}': {number}"); // 输出:99
// 编码多个数字
var ids = sqids.Encode(7, 8, 9);
Console.WriteLine($"编码多个数字 7, 8, 9: {ids}"); // 输出:ylrR3H
// 解码多个 ID
var numbers = sqids.Decode(ids);
Console.WriteLine($"解码多个 ID '{ids}': {string.Join(", ", numbers)}"); // 输出:7, 8, 9
// 使用自定义选项创建 SqidsEncoder 实例
var customSqids = new SqidsEncoder<int>(new SqidsOptions
{
Alphabet = "mTHivO7hx3RAbr1f586SwjNnK2lgpcUVuG09BCtekZdJ4DYFPaWoMLQEsXIqyz",//自定义字母表(注意:字母表至少需要 3 个字符)
MinLength = 5,//最小长度,默认情况下,Sqids 使用尽可能少的字符来编码给定的数字。但是,如果你想让你的所有 ID 至少达到一定的长度(例如,为了美观),你可以通过 MinLength 选项进行配置:
BlockList = { "whatever", "else", "you", "want" } //自定义黑名单,Sqids 自带一个大的默认黑名单,这将确保常见的诅咒词等永远不会出现在您的 ID 中。您可以像这样向这个默认黑名单添加额外项:
});
// 使用自定义 SqidsEncoder 编码和解码
var customId = customSqids.Encode(8899);
Console.WriteLine($"使用自定义 SqidsEncoder 编码: {customId}"); // 输出:i1uYg
var customNumber = customSqids.Decode(customId).Single();
Console.WriteLine($"使用自定义 SqidsEncoder 解码: {customNumber}"); // 输出:8899
}
}
项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。
- 源码开源地址:https://github.com/sqids/sqids-dotnet
- 本文示例源码:https://github.com/YSGStudyHards/DotNetExercises/tree/master/SqidsExercise
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没)。
- GitHub开源地址:https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
- Gitee开源地址:https://gitee.com/ysgdaydayup/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
在 .NET 中使用 Sqids 快速的为数字 ID 披上神秘短串,轻松隐藏敏感数字!的更多相关文章
- VS中的快捷键快速格式化代码,使好看,整齐
在VC2005中,快捷键是Ctrl + K, Ctrl + F, 这是一个组合键,即先按Ctrl + K, 这时候编辑器会等待下一个按键动作,此时再按Ctrl + F, 即可以格式化代码了,当然,也可 ...
- Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN
快速入门 使用 Spark Shell 进行交互式分析 基础 Dataset 上的更多操作 缓存 独立的应用 快速跳转 本教程提供了如何使用 Spark 的快速入门介绍.首先通过运行 Spark 交互 ...
- 对图片进行索引,存入数据库sqlite3中,实现快速搜索打开
对图片进行索引,存入数据库中,实现快速搜索打开 这个任务分为两步: 第一步:建立索引 import os import shutil import sqlite3 # 扫描函数,需扫描路径目录处 ...
- 【原创】Innodb中mysql如何快速删除2T的大表
小漫画 来,先来看小漫画陶冶一下情操 OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令 drop table erp 这个时候所有的mysql的相关进程都会停止,直到drop结束,m ...
- Innodb中MySQL如何快速删除2T的大表
转自:http://database.51cto.com/art/201808/582324.htm OK,这里就说了.假设,你有一个表erp,如果你直接进行下面的命令: drop table erp ...
- 使用excel中的数据快速生成sql语句
在小公司的话,总是会有要开发去导入历史数据(数据从旧系统迁移到新系统上)的时候.这个时候,现场实施或客户会给你一份EXCEL文档,里面包含了一些别的系统上的历史数据,然后就让你导入到现在的系统上面去. ...
- java中的fail-fast(快速失败)机制
java中的fail-fast(快速失败)机制 简介 fail-fast机制,即快速失败机制,是java集合中的一种错误检测机制.当在迭代集合的过程中对该集合的结构改变是,就有可能会发生fail-fa ...
- SD卡中FAT32文件格式快速入门(图文详细介绍)【转】
本文转自:http://blog.csdn.net/mjx91282041/article/details/8904705 说明: MBR :Master Boot Record ( 主引导记录) D ...
- SD卡中FAT32文件格式快速入门(图文详细介绍)
说明: MBR :Master Boot Record ( 主引导记录) DBR :DOS Boot Record ( 引导扇区) FAT :File Allocation Table ( 文件分配表 ...
- 数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1)
数据库 PSU,SPU(CPU),Bundle Patches 和 Patchsets 补丁号码快速参考 (文档 ID 1922396.1)
随机推荐
- elementUI中如何在Tabs标签页的标题文字后面添加文字或图标
1.效果如下: 实现代码如下:<el-tab-pane name="first"> <span slot="label"> <sp ...
- 【COM3D2Mod 制作教程(4)】实战!制作身体部分(上)
[COM3D2Mod 制作教程(4)]实战!制作身体部分(上) 教程介绍 现在正式进入实战教程环节,我会以我的实际制作过程详尽的教授每个细节,也因此受限于篇幅大小,"实战!制作身体部分&qu ...
- scala - [01] 概述
题记部分 001 || 介绍 (1)Spark -- 新一代内存级大数据计算框架,是大数据的重要内容 (2)Spark就是使用Scala编写的.因此为了更好的学习Spark,需要掌握Scala. (3 ...
- 赶快检查,木马可能已经植入服务器,Redis未授权访问漏洞记录,redis的key值出现backup要谨慎
问题描述:为图省事,很多时候我们在使用redis的时候会使用默认空密码,这就增加了安全隐患,如果有下属情况,那赶快去检查下redis,木马或许已经植入服务器,应尽快处理: 1.redis绑定在 0.0 ...
- script 标签中 defer 和 async 的区别
https://www.cnblogs.com/huangtq/p/18422775 在 <script> 标签中,defer 和 async 是两个用于控制 JavaScript 脚本加 ...
- PPT 技巧&网站
样机生成网站 https://mockuphone.com/device?type=computer CTROL+L 演示生成荧光笔 3.如何内嵌字体 文件->选项->保存->勾选潜 ...
- python 将字典转换为列表
在实现功能时,有时候有些函数适用于非字典形式 这时候就需要把字典转换为其他形式 本例主要讲解字典到列表转换 datas=[{'1':'nihao'},{'2':'very goog'}] to_lis ...
- 高德地图api标记点和线段重合点击响应问题
问题现象: 现在地图上放置了line和marker,marker在line的上层显示 这时line和marker同时存在,当line和marker有重合部分并点击重合点时,只响应line对应的clic ...
- gazebo小车模型(附带仿真环境)
博客地址:https://www.cnblogs.com/zylyehuo/ 参考链接 1.(https://blog.csdn.net/qq_43406338/article/details/109 ...
- js调用本地程序资源-兼容所有浏览器
在网页上通过JavaScript调用本地程序,兼容IE8/9/10/11.Opera.Chrome.Safari.Firefox等所有浏览器,在做Web开发时经常会遇到需要调用本地的一些exe或者dl ...