首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS :生成唯一的16位十进制值

问NodeJS :生成唯一的16位十进制值
EN

Cryptography用户
提问于 2022-12-26 12:20:17
回答 1查看 87关注 0票数 1

Situation

我需要在NodeJS API或C++加载项中生成唯一的16位十进制值.

它在我的组织内部使用(礼品卡id)。性能并不重要,因为它是非实时生成的。

我已经寻找了一些选择,但不确定他们的安全。如果有更好的办法,请告诉我。

选项1.使用crypto.randomInt

生成0到9之间的整数,16次。

文献资料说它避免了模偏。但如果连续使用16次,我不确定它是否是公正的。

选项2.随机哈希值+模10

  1. 从微秒精度时间创建SHA-256哈希值。
  2. 创建UInt16Array,对每个元素执行% 10。

我想这会有模偏。是否有任何API或技术可以安全地将SHA-256值切成16位十进制数字?

EN

回答 1

Cryptography用户

发布于 2022-12-26 20:21:30

在我看来,这些问题就像一个XY问题。

  1. 目前还不清楚为什么礼品卡号码需要16位数字组成。亚马逊有150万名员工,麦当劳有190万名员工。即使对如此庞大的公司来说,7位数也足够了。即使添加了校验和数字,也不需要16位数字。
  2. 对于给定的目的,生成礼品卡号,随机生成器是不必要的。我们通常使用随机生成器:( A)当我们无法保存可能的数字的整个注册表时,例如,当它需要大量CPU负载、存储或长响应时间时;( B)如果我们希望许多缔约方能够独立地生成数字并保持较低的碰撞概率。在您的情况下,您可以完全控制要生成的所有数字。这些数字可以由一个应用程序一次生成。

这就是为什么我建议采用以下方法:

  • 生成从1开始到员工数的git卡号码列表。
  • 把这张名单洗牌。

然后,每个员工号码将与一些随机查找的礼品卡号码相关联。

如果你想保持年复一年的礼品卡号码不变,而不是每年都生成礼品卡,如果你期望你的公司正在成长,新员工需要礼品卡,而且你希望避免更高的数字与新员工之间的关联,那么是的,随机生成器将是有帮助的。

在这种情况下,您可以将员工人数乘以10或100,并在此范围内生成数字。举例来说,如果贵公司有10 000名雇员,你可以取1至1 000,然后随机产生号码,然后分配给雇员。检查碰撞将是容易的,因为保持一个数组的假设1000元素在内存中是简单和快速的。在发生碰撞的情况下,您只需要生成一个新的数字,直到没有冲突,或者添加一些固定值,比如1,直到没有冲突。

当稍后需要新卡时,将有足够的“整体”在这个范围内为新的数字。

函数可以如下所示:

代码语言:javascript
复制
next_card_number = Math.floor( Math.random() * N )

最多的礼券号码。举例来说,如果有10 000名雇员,你可以使用999 999作为最高的礼品卡号码。

票数 0
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/103454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档