编辑
2025-09-27
C#
00

目录

摘要
正文
应用场景
优势
劣势
使用Hashids.net的例子
自定义Hash长度
使用自定义字母表

摘要

Hashids是一个小巧的库,用于将数字(通常是数据库中的ID)转换为一个短字符串,这个字符串是由字母(A-Z,a-z)和数字(0-9)组成的。Hashids的一个常见用途是在URL中隐藏数据库记录的实际ID,以增加安全性和对用户友好。

Hashids的.NET实现是Hashids.net,这是一个开源库,可以轻松地在.NET应用程序中使用。

正文

应用场景

  • URL短化:将长数字ID转换为短字符串,使URL更加简洁。
  • 增强安全性:隐藏实际的数据库ID,避免暴露内部数据结构。
  • 避免ID预测:连续的数字ID容易让人预测,使用Hashids可以打乱这种连续性。

优势

  • 不可逆性:不像加密算法,Hashids生成的ID没有直接的解密方法,但可以通过同样的盐值(salt)来解码。
  • 自定义:可以自定义盐值和字母表,生成独特的Hashids。
  • 简单易用:API简单,集成快速。
  • 无碰撞:在相同的盐值下,不同的数字会生成不同的Hashid。

劣势

  • 非加密:Hashids不是加密工具,不应用于需要高安全性的场景。
  • 长度限制:生成的字符串长度可能随ID的增大而增大,不适合所有的短URL场景。

使用Hashids.net的例子

你需要在你的.NET项目中安装Hashids.net库。通过NuGet包管理器可以轻松完成这一步骤:

image.png

image.png

C#
private void btnHash_Click(object sender, EventArgs e) { txt1.Text = "this is my test"; // 初始化Hashids var hashids = new Hashids(txt1.Text); // 加密一个数字 var hash = hashids.Encode(12345); // 解密字符串,得到原始数字 var numbers = hashids.Decode(hash); // 输出是一个数组:[12345] txt2.Text = hash; }

image.png

C#
private void btnEncodeBatch_Click(object sender, EventArgs e) { // 初始化Hashids var hashids = new Hashids(); // 加密多个数字 var hash = hashids.Encode(new int[] { 1, 2, 3 }); // 输出可能是:o2fXhV // 解密字符串,得到原始数字数组 var numbers = hashids.Decode(hash); // 输出是一个数组:[1, 2, 3] }

自定义Hash长度

可以指定Hashids的最小长度,以确保生成的字符串达到一定的长度。

C#
// 指定最小Hash长度 var hashids = new Hashids("this is test", 8); var hash = hashids.Encode(1); // 输出可能是:xWJD3pRK

使用自定义字母表

可以自定义一个字母表,以控制生成的Hashids字符串中所使用的字符。

C#
// 使用自定义字母表 var hashids = new Hashids("this is test", 0, "ABCDEFG123456789"); var hash = hashids.Encode(1); // 输出可能是:53

注:Hashids.net是.NET开发者的一个强大工具,用于在应用程序中优雅地处理ID。它既简单又灵活,可以很好地满足隐藏ID和生成短链接的需求。然而,开发者应该意识到Hashids并不适合所有场景,特别是在对安全性有严格要求的情况下。正确使用Hashids可以为你的应用程序增加一层安全性和专业性。

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!