精选文章 Hashids.java使用入门

Hashids.java使用入门

作者:giserinchina 时间: 2021-02-05 09:43:12
giserinchina 2021-02-05 09:43:12
【摘要】小型Java类,用于从一个或多个数字生成类似YouTube的哈希值。 
由Ivan Akimov从javascript hashids.js移植 
它是什么? 
hashids(哈希ID)从无符号(长)整数创建短的,唯一的,可解码的哈希。 
它是为网站设计的,用于URL缩短,跟踪内容或将页面设为私有(或至少不可猜测)。 
该算法尝试满足以下要求: 
哈希值必须唯一且可解码。它们应该能够包含多...

小型Java类,用于从一个或多个数字生成类似YouTube的哈希值。

Ivan Akimov从javascript hashids.js移植

它是什么?

hashids(哈希ID)从无符号(长)整数创建短的,唯一的,可解码的哈希。

它是为网站设计的,用于URL缩短,跟踪内容或将页面设为私有(或至少不可猜测)。

该算法尝试满足以下要求:

  1. 哈希值必须唯一且可解码。
  2. 它们应该能够包含多个整数(因此您可以在复杂或集群系统中使用它们)。
  3. 您应该能够指定最小哈希长度。
  4. 散列不应该包含基本的英语诅咒词(因为它们旨在出现在公共场所-如URL)。

而不是显示的项目12或者3,你可以告诉他们的U6dcu87UHMou。您不必将这些散列存储在数据库中,但是可以即时进行编码和解码。

所有(长)整数都必须大于或等于零。

用法

添加依赖项

哈希值在Maven Central中可用。如果您使用的是Maven,请将以下依赖项添加到pom.xml的依赖项中:


  org.hashids
  hashids
  1.0.3

另外,如果您使用gradle或在android上,请build.gradle在依赖项下将以下内容添加到应用程序的文件中:

compile 'org.hashids:hashids:1.0.3'

导入包裹

导入 org.hashids ;

编码一个数字

您可以传递唯一的盐值,因此您的哈希值不同于其他所有人的哈希值。我以“这是我的盐”为例。

Hashids hashids =  new  Hashids这是我的盐);
字符串 hash = hashids 编码(12345L);

hash 现在将是:

NkK9

解码

注意,在解码期间,使用相同的盐值:

Hashids hashids =  new  Hashids这是我的盐);
long []数字=哈希值解码( NkK9 );

numbers 现在将是:

[ 12345 ]

用不同的盐解码

如果更改盐,解码将不起作用:

Hashids hashids =  new  Hashids这是我的胡椒粉);
long []数字=哈希值解码( NkK9 );

numbers 现在将是:

[]

编码多个数字

Hashids hashids =  new  Hashids这是我的盐);
字符串 hash = hashids 编码(683L94108L123L5L);

hash 现在将是:

aBMswoO2UB3Sj

解码方式相同

Hashids hashids =  new  Hashids这是我的盐);
long []数字=哈希值解码( aBMswoO2UB3Sj );

numbers 现在将是:

[ 683, 94108, 123, 5 ]

编码并指定最小哈希长度

在这里,我们对整数1进行编码,并将最小哈希长度设置为8(默认值为0,这意味着哈希将是最短的长度)。

Hashids hashids =   Hashids这是我的盐8);
字符串 hash = hashids 编码(1L);

hash 现在将是:

gB0NV05e

解码

Hashids hashids =   Hashids这是我的盐8);
long []数字=哈希值解码( gB0NV05e );

numbers 现在将是:

[ 1 ]

指定自定义哈希字母

在这里,我们将字母设置为仅包含六个字母:“ 0123456789abcdef”

Hashids hashids =  new  Hashids这是我的盐0 0123456789abcdef );
字符串 hash = hashids 编码(1234567L);

hash 现在将是:

b332db5

编码和解码“ MongoDB” ID

除了对长值进行编码和解码外,Hashids还提供用于以十六进制表示法对ID(例如由MongoDB生成的对象ID)进行编码和解码的功能。

Hashids hashids =  new  Hashids这是我的盐);
字符串 hash = hashids encodeHex( 507f1f77bcf86cd799439011 ); // goMYDnAezwurPKWKKxL2 
字符串 objectId = hashids encodeHex(hash); // 507f1f77bcf86cd799439011

注意,用于对十六进制值进行编码和解码的算法与用于对长值进行编码和解码的算法不兼容。这意味着您不能使用decodeHex提取使用编码的长id的十六进制表示形式encode

随机性

哈希值的主要目的是混淆ID。它不是为了安全目的或压缩目的而使用或经过测试的。话虽如此,该算法确实试图使这些哈希值变得不可猜测和不可预测:

重复号码

Hashids hashids =  new  Hashids这是我的盐);
字符串 hash = hashids 编码(5L5L5L5L);

您看不到任何重复的模式,这些模式可能显示哈希中有4个相同的数字:

1Wc8cwcE

与递增数字相同:

Hashids hashids =  new  Hashids这是我的盐);
字符串 hash = hashids 编码(1L2L3L4L5L6L7L8L9L10L);

hash 将会 :

kRHnurhptKcjIDTWC3sx

递增数字散列:

Hashids hashids =  new  Hashids这是我的盐);
字符串 hash1 = hashids 编码(1L); / * NV * /
字符串 hash2 =哈希值编码(2L); / * 6m * /
字符串 hash3 = hashids 编码(3L); / * yD * /
字符串 hash4 =哈希值编码(4L); / * 2l * /
字符串 hash5 =哈希值编码(5L); / * rD * /

坏哈希

我编写此类的目的是将这些哈希放置在可见的位置,例如URL。如果我为每个用户创建一个唯一的哈希,那么不幸的是,如果哈希最终成为一个坏词,那将是不幸的。想象一下,自动为您的用户创建一个带有哈希的网址,如下所示-http://example.com/user/a**hole

因此,该算法尝试避免使用默认字母生成最常见的英语诅咒词。这是通过切勿将以下字母彼此相邻来完成的:

c, C, s, S, f, F, h, H, u, U, i, I, t, T

局限性

原始和参考实现是JSHashids网站)版本。JS的number限制为(2^53 - 1)。我们的java实现使用Long,但出于兼容性考虑,限于JS的相同限制。如果提供的数字更大,IllegalArgumentException将抛出。

勿删,copyright占位
分享文章到微博
分享文章到朋友圈

上一篇:美团点评移动网络优化实践

下一篇:2020B证(安全员)考试及B证(安全员)模拟考试题库

您可能感兴趣

  • 如何制作和使用帮助文件

    如何制作和使用帮助文件  整理编辑:China ASP    带 有 帮 助 文 件 的 应 用 程 序 无 论 对 程 序 员 还 是 用 户 都 是 不 同 凡 响 的, 它 能 节 省 印 刷 大 量 用 户 手 册 的 开 支, 对 程 序 员 编 辑 修 改 和 用 户 手 册 的 复 制 保 存 都 极 为 方 便。 帮 助 文 件 的 另 一 个 很 有 前 景 的 应 用 是...

  • 使用ASP和Word进行服务器端拼写检查

    编译 甘冀平(2000-09-26) 本文讨论的问题与下列方面相关: Microsoft Word 97 for Windows Microsoft Visual InterDev, version 6.0 Microsoft Internet Information Server version 4.0 概要 本文描述了如何使用Microsoft Word在Web页面ASP文件中添加拼写检...

  • Win32汇编教程三 一个简单的对话框 --- 兼谈资源文件的使用

    --------------------------------------------------------------------------------Windows 的资源文件不管在Dos下编程还是在Windows下编程,我们总是要用到除了可执行文件外的很多其他数据,如声音数据,图形数据,文本等等,在Dos下编程,我们可以自己定义这些文件的格式,但这样一来就造成了很多资源共享的问题...

  • Win32汇编教程六 工具栏和状态栏的使用

    --------------------------------------------------------------------------------有关工具栏和状态栏工具栏和状态栏也是Windows标准界面的组成部分,工具栏一般位于菜单栏的下方,上面是一些系统定义的或自己定义的图片,可以通俗地显示这个按钮的作用。状态栏一般位于窗口的最下方,用来显示程序运行中的一些信息。工具栏和状...

  • WAP编程入门

    WAP编程入门 作者: www.wapschool.com 写作日期:2000-4-13   WAP编程前的知识准备   如果你具备以下的知识,你就可以很快地学会WAP网页的设计: 理解INTERNET基本知识,了解HTTP协议及其内涵; 熟悉WEB服务器,并理解WEB 服务器与浏览器之间的交互原理、关系; 了解HTML语言规范,熟悉静态网页的设计; 熟悉JAVASCRIPT、XM...

  • XML入门精解之结构与语法

    (作者:廖家序 2000年12月13日 13:04)  ■创建XML文件的工具   XML文件和HTML文件一样,实际上是一个文本文件。显然大家立刻就会明白,创建XML文件最普通的工具和HTML一样,就是“记事本”了。除了“记事本”之外,当然还有一些更加方便的工具,如XML Notepad、XML Pro、CLIP!XML Editor等,这些工具的一大特点是:能够检查你所建立的XML文件是...

  • 使用Rundll32.exe和Rundll.exe

    福州 Pasic 常用Windows9x的朋友一定对Rundll32.exe和Rundll.exe这两个文件不会陌生吧,不过,由于这两个程序的功能原先只限于在微软内部使用,因而真正知道如何使用它们的朋友想必不多。那么好,如果你还不清楚的话,那么就让我来告诉你吧。  首先,请你做个小实验(请事先保存好你正在运行的程序的结果,否则...

  • 系统钩子的使用

    Win32全局钩子在VC5中的实现  ·贺成士   Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的。而钩子是Windows系统中非常重要的系统接口,用它可以截获并处理送给其他应用程序的消息,来完成普通应用程序难以实现的功能。钩子的种类很多,每种钩子可以截获并处理相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。...

CSDN

CSDN

中国开发者社区CSDN (Chinese Software Developer Network) 创立于1999年,致力为中国开发者提供知识传播、在线学习、职业发展等全生命周期服务。

华为云40多款云服务产品0元试用活动

免费套餐,马上领取!
Hashids.java使用入门介绍:华为云为您免费提供Hashids.java使用入门在博客、论坛、帮助中心等栏目的相关文章,同时还可以通过 站内搜索 查询更多Hashids.java使用入门的相关内容。| 移动地址: Hashids.java使用入门 | 写博客