对长度4使用四次UUID与对长度16使用一次UUID相同吗

  • 本文关键字:UUID 一次 四次 python uuid nanoid
  • 更新时间 :
  • 英文 :


我的情况是,我需要为人们提供一个可以用于登录的一次性代码。这些人不懂技术。他们需要提供一个人类可读的代码。

格式是这样的;

ACBE-adK3-SdLK-K23J

一组4乘4的人类可读字符。对于总共16个字符,作为UUID,这似乎是合理安全的。但如果需要,可以很容易地扩展。

现在,使用NanoID 4次来生成一个4个字符长的字符串,相当于使用它一次来生成16个字符的字符串,然后将其切碎吗?我认为是的。从程序上讲,实现任何一个都很琐碎。但是,我真的很想知道实际的事实答案。如果某个数学专家会纵容我?

编辑:回答问题;

  • 这是为了允许人们访问他们应该访问的照片,比如护照、学校照片等等。人们使用该代码一次即可将照片链接到他们的电子邮件,并使用电子邮件/密码组合从登录时链接。在这种情况下,让人们提前使用电子邮件进行注册不是一种选择
  • 我知道使用十六进制数字是常见的情况。我需要易于阅读的人。因此,将一个16位的十六进制块切割成4个不同的部分似乎是合乎逻辑的步骤
  • 所选择的字母表将是a-z a-z 0-9,并排除一些符号,如0/o/o和I/1/l,以限制错误。这将允许用更少的字符表达相同的ID
  • 我现在知道,NanoID不是一个UUID实现。谢谢。但对于我的目标来说,我认为这已经足够了。如果没有,我也想知道
  • 我正在使用Python 3

像您在问题中给出的字符串格式最终是从整数到人类可读字符串的一对一映射。如果生成的整数是唯一的,那么人类可读的字符串也是.

在您的情况下,您可以生成一个区间为[0,aS的统一随机整数,其中a是字母表大小(例如36表示大写字母和数字(,S为ID中的字符数(在您的示例中为16,不包括连字符(。然后将该整数与所需格式的人类可读字符串一一映射。

在你的情况下,身份证将作为一个秘密";确认码";,在这种情况下,它应该使用安全的随机生成器生成,例如Python中的secrets.SystemRandomrandom.SystemRandomsecrets.randbelow(但请注意,随机生成的值本身并不是唯一的(。

最新更新