2010-01-28 31 views
1

我需要为我的应用程序生成唯一的ID,我正在寻找合适的算法。我宁愿是这样的 -生成唯一的(可能是自动递增的)ids的算法

YYYY + MM + DD + HH + MM + SS + <random salt> + <something derived from the preceding values>

F.ex. -

20100128184544ewbhk4h3b45fdg544

我想使用SHA-256或东西,但结果字符串应该不会太长。我可以使用UUID,但它们又太长了,它们只能保证在一台机器上是唯一的。

我会很乐意提出建议,想法。我的编程语言是Java。

编辑:该ID不需要密码安全。我期待在简单的散列交易算法,如一个由丹·伯恩斯坦等

+8

UUID保证是唯一*通用*。它使用算法中的MAC地址确保没有两台机器生成相同的UUID。 – kennytm 2010-01-28 13:21:08

+2

GUID有什么问题?它不会比你给出的例子长很多,并且GUID是唯一的 – 2010-01-28 13:21:43

+5

@Kenny:Afaik没有人再使用第一个版本(带有MAC地址的版本)。由于目前许多NIC具有用户可配置的MAC地址,因此无论如何都有点不足。我今天看到的大多数UUID都是版本4. – Joey 2010-01-28 13:25:00

回答

0

所以我最终解决这 -

d = YYYYMMDDHHMMSS 
hash = d + sha256(d + random_salt)[:10] 

谢谢大家的响应。

+2

您最好删除日期前缀并向sha子串添加另外14个字符 - SHA256输出的每个字符都会比datetime的字符增加更多的熵。 – 2010-01-29 10:36:00

-1

我想,如果你使用SHA1(MD5(YYYYMMDDHHMMSS + YourSystemName + CLIENTNAME))日子会把被罚款40个字符..;)

+12

'SHA1(MD5(...))'是无用的;如果你只是走这条路线就使用SHA1。 – 2010-01-28 13:30:08

0

试试这个:

java.security.messageDigest() 
+1

那是另一种运行MD5或SHA-1的方法,不是吗? – bmargulies 2010-01-28 13:53:24

0

你可以使用SHA-256,然后只从结果(或然而,许多你喜欢的,平衡的长度和独特性,只要你喜欢)采取的第一个10个字节。

相关问题