如何创建一个不能伪造的唯一ID?

时间:2014-06-03 23:45:13

标签: c# php uniqueidentifier serial-number

我有一个.NET客户端应用程序和一个PHP服务器Web应用程序。

在某些时候,.NET应用程序必须由唯一ID标识,并通过http post将该数据传递给Web服务器。 Web服务器将响应一些数据并将唯一ID存储在数据库中。

假设我有一个恶意用户,我想用唯一的ID禁止他。因此,在我看来,这个独特的ID有两个重要的事情:

  • 唯一ID必须非常独特,并且每台计算机始终相同
  • 用户不应该欺骗系统(被禁用的用户可以生成新的ID并手动将其发布到Web服务器以接收新数据)

如何确保用户无法(轻松)生成唯一ID?

如何确保可以在服务器上验证唯一ID是否有效?

这里常用的方法(算法,加密?)是什么?

2 个答案:

答案 0 :(得分:3)

为所有应用创建UUID并在验证后将其存储到数据库中并删除/禁止/标记UUIDS以便它们不能再次使用

MYSQL中的UUID:

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

也可以在postgres和其他RDBMS存储中使用

我已经多次使用uuids创建了1000万个列表,但从未发生碰撞。

答案 1 :(得分:0)

好的,我总结一下:

  • 当然没有完善的安全系统。 Jeremy Miller
  • Dan的回答是不正确的,因为MySql UUID不依赖于设备,因此不满足条件“每台计算机的ID应该相同”
  • 我应该生成一个id(比如UUID),以加密的形式将它存储在计算机上的某个地方,在你的代码中包含一个种子,然后将带有种子的id的哈希传输到你的服务器,要求每个调用都包含哈希以及一些其他组件,您还要包含在哈希中以进行验证。 Jeremy Miller
  • 这种方法不是万无一失的,因为本地存储的所有内容都可以删除,但至少很难猜出有效生成的哈希值