如何隐藏用户id
本来因为用户id太短了,不想暴露用户数,就用了uuid,但是后面又觉得uuid显示出来太长了,有没有什么方案可以基于id或者uuid生成12-16位的字符串只有数字和字符串,并且可以逆向生成回来的
HashIds。有多种语言的实现,Golang 的话可以看这个:
https://github.com/speps/go-hashids
生成一个可以逆向生成的12-16位数字和字符串的隐藏方案是一个有趣的问题,但这通常涉及到哈希或编码技术。请注意,任何可逆的转换都可能存在安全风险,因为恶意用户可能尝试逆向这个转换来发现原始ID。
以下是一个基于用户ID或UUID生成较短、可逆字符串的简化方案:
例如,假设您有一个Base32编码的字符串3S4PQR6YTJHCG7262S4QCRDT
(这只是一个例子,实际编码会不同),您可以截断它到16个字符3S4PQR6YTJHCG726
。然后,您可以添加一个校验和或哈希值来确保这个缩短的字符串仍然是唯一的。
请注意,这些方案都有潜在的安全风险。如果攻击者可以访问到这些缩短的ID,并且知道它们是如何生成的,他们可能会尝试逆向工程来发现原始的ID。
为了安全起见,通常建议不生成可以逆向生成的隐藏ID。相反,您可以使用随机生成的令牌或哈希值,这样即使攻击者可以看到它们,他们也无法轻易地找到原始的ID。
如果您确实需要一个较短的唯一标识符,并且不关心其可逆性,您可以考虑使用哈希函数(如SHA-256)和适当的截断来生成一个较短的唯一字符串。但是,请注意,这将增加冲突的风险,尤其是在用户数量非常大的时候。
问题内容: 例如: 有任何内置功能可以做到这一点吗? 谢谢。 问题答案: 该散包是这很有帮助。请注意,这是对特定哈希实现的抽象。在软件包子目录中可以找到一些现成的。 例: (也在这里) 输出:
如何生成版本1(基于时间的)UUID?是否有一个单独的库,或者它是如何在Java7 API中提供的,我错过了它。
我找到了这个答案,有没有办法基于JDK或某个库中的种子字符串生成相同的UUID?但这是java的方式。 我也需要这样做,但在javascript中,我可以使用任何npm模块或任何库或自定义函数。 可以通过这种方式使用UUID为输入字符串获取始终相同的UUID: String aString=“JUST\u A\u TEST\u String” 字符串结果=UUID。nameuuidrombytes
问题内容: UUID库生成32个字符的UUID。 我想只生成8个字符的UUID,这可能吗? 问题答案: 这是不可能的,因为每个定义的UUID是一个16字节的数字。 但是,当然,您可以生成8个字符长的唯一字符串(请参阅其他答案)。 另外,在生成更长的UUID并将其子串化时也要小心,因为ID的某些部分可能包含固定字节(例如,MAC,DCE和MD5 UUID就是这种情况)。
问题内容: 我一直在寻找一种简单的 Java算法来生成伪随机的字母数字字符串。在我的情况下,它将用作唯一的会话/密钥标识符,在整个世代中“可能”是唯一的(我的需求实际上不需要任何更复杂的东西)。 理想情况下,我可以根据自己的独特性要求指定长度。例如,生成的长度为12的字符串可能看起来像。 问题答案: 算法 要生成随机字符串,请连接从可接受的符号集中随机抽取的字符,直到字符串达到所需的长度。 实作
假设我有一个长度为8个字节的字符串,每个字节都是一个字符,来自以下范围:0-9,a-z,A-Z,总共62个变量。这个字符串的排列总数是62的8次方= 218340105584896。我需要编写一个函数,该函数将接受0-218340105584896范围内的数字,并返回唯一的字符串。在“唯一”下,我的意思是该函数不能为该范围内的两个不同数字返回相同的字符串。任何代码示例和提示将不胜感激。