【问题标题】:generate random and unique key of exactly 10 characters based on longer input string根据较长的输入字符串生成恰好 10 个字符的随机且唯一的密钥
【发布时间】:2019-11-07 11:52:49
【问题描述】:

我需要根据某些特定字段为每条记录生成恰好 10 个字符的随机且唯一的密钥。 如果我下次提供相同的信息集,它应该给我相同的密钥。

总之,我正在寻找一种将较长的字符串始终转换为 10 个字符的字符串的方法。

类似于 md5 哈希的东西,但应该只输出 10 个字符。

谢谢。

注意:作为 cmets 之一问我尝试了什么。基本上我还没有找到任何合适的解决方案并对其进行了大量研究。 我能想到的唯一解决方案是将 md5 哈希和 10 个字符的密钥存储到一个数据库中,以便下次查找。可以生成一个自定义的 10 个字符的密钥,除了映射 db 之外,它与 md5 哈希没有任何关系。

【问题讨论】:

  • 您有要求,而不是我们。请向我们展示您迄今为止所做的尝试,我们可以为您提供帮助。
  • MD5 有什么问题?为什么长度不合适?
  • 用户需求。 md5 哈希不可读。
  • 你认为什么是“可读”的字符串?您希望字符串具有哪些字符?例如,A-Z、a-z、0-9?特殊字符呢?还有其他角色吗?

标签: java hash md5


【解决方案1】:

您要求做的事情是不可能的。问题标题是“根据较长的输入字符串生成正好 10 个字符的随机且唯一的密钥”。

Pigeonhole principle,您不能这样做。因为长度超过 10 个字符的字符串比正好 10 个字符长的字符串多,所以你想出的任何散列函数都会产生重复。多个长字符串将映射到同一个 10 个字符的字符串。

你不能保证唯一性。

【讨论】:

    【解决方案2】:

    将字符串转换为 char 数组,将 chsr 转换为 int,然后将最后一个字符和第一个字符相乘,第二个和第二个字符相乘,直到得到一个 10 位数字。

    【讨论】:

    • 不保证唯一性。 1xxxxxxxxxxxxx8 和 2xxxxxxxxxxxxxx4 不是要给我相同的密钥吗?
    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 2018-01-27
    • 1970-01-01
    • 2012-11-21
    • 2010-10-18
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多