【问题标题】:Java Generate Unique Surrogate alphanumeric key based on textJava根据文本生成唯一代理字母数字键
【发布时间】:2013-05-21 17:35:12
【问题描述】:

我想根据几列生成一个唯一键(其中之一是搜索词......所以长度可以很长)。记录量约为 600 万条。我使用了 MD5 并生成了一个 32 个字符的字母数字字符串。我们对这将是独一无二的有多大信心?你能建议任何其他解决方案吗? 提前致谢

【问题讨论】:

  • 使用surrogate key。让数据库为你生成。
  • 这里有Java问题吗?这里是否存在安全问题(除了您选择使用哈希)?
  • 如果您担心 128 位 MD5 哈希或 160 位 SHA1 的唯一性,请查看尚未发现冲突的 SHA2(384 或 512 位)。

标签: java security md5 sha


【解决方案1】:

查找该词的 MD5 数据。 例如。 从字符串转换为 MD5 “密码”=>“5f4dcc3b5aa765d61d8327deb882cf99” "5f4dcc3b5aa765d61d8327deb882cf99"=>"696d29e0940a4957748fe3fc9efd22a3"

要返回,您必须这样做两次 例如 "696d29e0940a4957748fe3fc9efd22a3"=>"5f4dcc3b5aa765d61d8327deb882cf99 "5f4dcc3b5aa765d61d8327deb882cf99=>"密码"

您可以使用本网站进行在线测试 http://md5.gromweb.com/

你可以这样做直到你想要。希望这对你有帮助:)

【讨论】:

    【解决方案2】:

    要真正保证唯一性,你必须检查每一个新项目与整个历史。

    例如,您可以在 RDB 中组织一个表,其中主键值作为您生成的表,并继续生成直到您的插入实际成功。听起来像是一个巨大的开销,但对于大多数实际目的来说并不是。

    如果 RDB 可用并且具有类似于 Oracle 中的序列的功能,另一种方法可能是将此功能与您的算法结合使用。

    【讨论】:

    • 感谢您的回复...但 RDB 不可用。对于我们的用例,由于重复的概率非常低,我们可以根据业务进行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多