2012-06-17 34 views
0

首先,请温柔一点,我对DB设计知之甚少。我正在与Splunk一起根据客户呼叫信息(呼叫详细记录)生成记录。由于数量庞大,我无法真正使用splunk来处理某些数据,因为它是非关系性的。所以我会把数据带入,使用splunk做一些简单的警报,监视奇怪的模式,并做一些其他更高级的事情。我最容易获得的数据源已经在系统上近乎实时地提供了。我想要做的是将传入的SIP呼叫Id(由RFC定义必须是全局唯一的),传出的SIP呼叫标识(再次,必须是全局唯一的定义),当前unix历元时间,然后随机生成数字从1-2^31,将它们连接在一起,然后采用结果的md5散列并将其用作主键。我们碰到碰撞的可能性有多大?任何其他方法的意见将非常感激。使用MD5哈希作为数据库的主键?

+0

你可以简单地使用你的结果字符串没有md5。 DB会为你做。 – kofemann

+2

请记住,根据最近的研究“MD5应该被认为是密码破解,不适合进一步使用”。 http://en.wikipedia.org/wiki/MD5 –

回答

2

发生碰撞的可能性大约为1^2^128,但由于md5有些破裂,如果对手知道RNG的某些信息,攻击者可能会在理论上更频繁地创建碰撞。我认为你可以直接使用创建的值,而不用散列,或者考虑碰撞可能导致的风险并为此做好计划。

+0

对主键中包含的字符没有限制吗?还有一些标点符号(主要是带有点,破折号和@的字母数字字符)。 – Matthew

+1

这应该是好的。至少MySQL支持VARCHAR主键,到目前为止,根据您的描述,您不会有任何密钥长度或内容问题。当然,注意SQL注入。 – jjrv

+0

太好了,谢谢! – Matthew