使用PHP和MySQL生成强大的唯一用户ID

bra*_*ack 5 php mysql security optimization hash

Ahoy Stack Overflow!这是mai的第一篇帖子......

我正在尝试使用加盐的唯一公钥来识别用户.

  1. 算法 - 我应该使用uniqid(),sha256,sha512,还有其他什么?所有的哈希都会被腌制.NIST推荐SHA256,但我更愿意听听其他人的建议.
  2. 生成 - 哈希(SALT +AUTO_INCREMENT_PK+CREATED_TIMESTAMP)是否足够?熵更多?
    • 我使用电子邮件,因为它对每个用户都是唯一的,但是用户可以修改他们的电子邮件地址.我还在考虑存储signup_email,以便不必重新计算哈希值.
  3. MySQL存储 - 目前,我们的ID是INT(255)auto_increment主键.如前所述,可能有数亿个密钥.根据加密算法,我应该有一个固定大小的ID.我可以保留INT(255)还是应该使用CHAR(n)?

---------------------- Thanks for reading :) -------------------------------

wil*_*ler 5

一件事:如果你不相信用户的ID,通过GET或POST发送它们将不起作用; 这些对于有动力的用户都是可见的.


我将使用salt.counter.time字符串使用SHA256,并使用输出为实际id生成GUID.这样可以最大限度地减少碰撞的可能性.

您将不得不使用CHAR for MySQL来存储GUID.

有关更深入的信息,请参阅http://us2.php.net/manual/en/function.uniqid.php上的评论.AFAIK GUID不是PHP核心的一部分,所以你必须假装一点.