【发布时间】:2017-09-09 13:05:53
【问题描述】:
我想根据我的应用程序中的每个用户的 id(每个用户都有一个唯一的 id)为我的应用程序中的每个用户生成唯一的 32 字长度的哈希字符串。当我搜索这个时,我在 SO 中发现了一个类似的问题。 How to generate random SHA1 hash to use as ID in node.js? Gabi Purcaru 的回答建议使用 crypto 模块的 createHash 与当前时间和随机字符串。代替那个随机字符串,我可以使用用户的唯一 ID,这样我可以确保生成的字符串始终是唯一的。但这总是给我 40 个字符串长度的哈希值。但我想要它 32 个字符串长度。如何用同样的方法生成32字长的随机字符串?
crypto.createHash('sha1').update(current_date + uid).digest('hex'); //This always gives 40-word length string
我还提到了 naomik 对同一问题的出色回答。他建议使用crypto.randomBytes()。但是我们如何确保它永远不会再生成相同的字符串呢?
【问题讨论】:
-
所以.. 你有一个唯一的 id,你需要另一个 .. 为什么?您为什么不简单地散列您已经拥有的唯一 ID?
-
@Mjh uid 的长度为 5。我想要一个唯一的 32 字长字符串。
-
@Mjh 我们如何从 5 个单词的字符串中生成 32 个单词的字符串?
-
您可以散列该 5 字字符串。例如,
md5将产生 32 个字符(16 个字节,当显示为十六进制数字时将产生 32 个字符)。有很多算法可供选择,但老实说 - 我认为这样做真的没有任何意义。由于您出于某种不清楚的原因“想要它” - 您可以使用各种方法,从要求您的数据库生成UUID到散列随机字符串或现有信息。 -
谢谢@Mjh。我需要为我的应用程序的需要创建 32 字的唯一长度字符串。我想我可以使用
md5。再次感谢您的快速解决方案:)
标签: javascript node.js