Java 跨多个客户端和服务器生成真正的全局唯一id 总结
flash和/或javascript客户端中真正全局唯一的ID。我可以使用当前浏览器/flash中可用的RNG来实现这一点,还是必须构建一个具有服务器端随机性的复合ID 细节 我需要为对象生成全局唯一标识符。我有多个用java编写的服务器端“系统”,需要能够交换ID;这些系统中的每一个都有一组flex/javascript客户机,它们实际生成新对象的id。我需要在一组不相关的系统中保证全局唯一性;例如,我需要能够合并/同步两个独立系统的数据库。我必须保证这些id之间不会发生冲突,并且在创建对象后,我永远不需要更改对象的id。我需要能够在flash和javascript客户端中生成id,而不必为每个id联系服务器。只要不经常联系服务器,依赖服务器提供的种子或系统id的解决方案就可以了。最好采用完全断开连接的解决方案。类似地,不需要预先注册系统的解决方案比依赖中央机构(如MAC地址中的OUI)的解决方案更可取 我知道显而易见的解决方案是“使用UUID生成器”,比如flash中的UIDUtil。此函数明确否认全局唯一性。总的来说,我担心依靠PRNG来保证全球的独特性 提议的解决办法 完全依赖客户端中的安全随机数生成器。 flash11+has;Javascript有window.crypto,但它是非常新的,在IE中不受支持。有类似的解决方案,使用鼠标添加熵 我知道,给定一个完美的RNG,2122随机UID发生碰撞的可能性很小,但我担心我不会在javascript或flash客户端中获得这种程度的随机性。我更担心的是,即使是加密RNG的典型用例也与我的不同:对于会话密钥等,冲突是可以接受的,只要攻击者无法预测它们。就我而言,碰撞是完全不可接受的。我真的应该依靠安全RNG的原始输出来获得唯一的ID吗?Java 跨多个客户端和服务器生成真正的全局唯一id 总结,java,javascript,flash,guid,Java,Javascript,Flash,Guid,flash和/或javascript客户端中真正全局唯一的ID。我可以使用当前浏览器/flash中可用的RNG来实现这一点,还是必须构建一个具有服务器端随机性的复合ID 细节 我需要为对象生成全局唯一标识符。我有多个用java编写的服务器端“系统”,需要能够交换ID;这些系统中的每一个都有一组flex/javascript客户机,它们实际生成新对象的id。我需要在一组不相关的系统中保证全局唯一性;例如,我需要能够合并/同步两个独立系统的数据库。我必须保证这些id之间不会发生冲突,并且在创建对象后
生成包含系统、会话和对象ID的复合ID。 一个明显的实现是在服务器安装时创建一个系统UUID,保留每个客户端登录会话id(例如在数据库中),然后将系统和会话id发送给保留每个会话计数器的客户端。uid将是三重:系统ID、会话ID、客户端计数器 我可以想象直接将它们连接起来,或者用加密散列对它们进行散列。我担心散列本身可能会引入冲突,特别是当散列的输入与输出大小相同时。但是散列会掩盖系统id和计数器,这可能会泄露信息。
与在安装时生成系统ID不同,另一种解决方案是使用一个中央注册表来分发唯一的系统ID,有点像DOI所做的。然而,这需要更多的协调,但我想这是真正保证全球统一性的唯一途径 关键问题
- 随机的还是复合的
- 包括系统ID
- 如果系统id:生成随机系统id或使用中央注册表
- 包括时间戳或其他临时标记
- 散列还是不散列
[server id][client id][request id]