【问题标题】:Using an MD5 Hash as a primary key for a DB?使用 MD5 哈希作为数据库的主键?
【发布时间】:2012-06-18 03:26:24
【问题描述】:

首先,请温柔一点,我对数据库设计知之甚少。我正在与 Splunk 合作,根据客户呼叫信息(呼叫详细记录)生成记录。由于体积,我不能真正使用 splunk 来处理一些数据,因为它是非关系的。所以我会把数据拿进来,用 splunk 做一些简单的警报,监控奇怪的模式,做一些其他更高级的事情。我最容易获得的数据源已经在系统上近乎实时地可用。我想做的是获取传入的 SIP 呼叫 ID(根据 RFC 定义必须是全局唯一的),传出的 SIP 呼叫 ID(再次,必须是全局唯一的定义),当前的 unix 纪元时间,然后随机生成1-2^31 的数字,将它们连接在一起,然后将结果的 md5 哈希值用作主键。我们遇到碰撞的可能性有多大?非常感谢任何有关其他方法的建议。

【问题讨论】:

  • 您可以简单地使用没有 md5 的结果字符串。 DB 会为你做这件事。
  • 请记住,根据最近的研究,“MD5 应该被认为是密码损坏且不适合进一步使用”。 en.wikipedia.org/wiki/MD5

标签: md5


【解决方案1】:

冲突的可能性约为 2 ^ 128 分之一,但由于 md5 有点损坏,理论上,如果对手了解您的 RNG,他们可能会通过以某种方式制作合适的调用 ID 来更频繁地制造冲突。我认为您可以直接使用该创造的价值而无需散列,或者考虑碰撞可能导致的风险并为此制定计划。

【讨论】:

  • 主键中包含的字符是否没有限制?包括一些标点符号(主要是带有点、破折号和@的字母数字字符。)
  • 应该没问题。至少 MySQL 支持 VARCHAR 主键,并且到目前为止,根据您的描述,您不会有任何键长度或内容问题。当然要注意 SQL 注入。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多