小编Chr*_*son的帖子

在许多客户端和服务器上生成真正全球唯一的ID

摘要

Flash和/或javascript客户端中真正全局唯一的ID.我可以使用当前浏览器/闪存中提供的RNG执行此操作,还是必须构建具有服务器端随机性的复合ID?

细节

我需要为对象生成全局唯一标识符.我有多个用java编写的服务器端"系统",需要能够交换ID; 这些系统中的每一个都有一组flex/javascript客户端,它们实际上为新对象生成ID.我需要保证整个不相关系统的全球唯一性; 例如,我需要能够合并/同步两个独立系统的数据库.我必须保证这些id之间永远不会发生冲突,并且我永远不需要在创建后更改对象的id.我需要能够在flash和javascript客户端生成id而无需为每个id联系服务器.只要不经常联系服务器,依赖于某些服务器提供的种子或系统ID的解决方案就可以了.完全断开连接的解决方案是优选的.类似地,不需要预先注册系统的解决方案优于依赖于中央权限(例如MAC地址中的OUI)的解决方案.

我知道显而易见的解决方案是"使用UUID生成器",例如Flash中的UIDUtil.该功能特别否定全球唯一性.总的来说,我担心依靠PRNG来保证全球的独特性.

提出的解决方案

完全依赖于客户端中的安全随机数生成器.

Flash 11+有flash.crypto.generateRandomBytes ; Javascript有window.crypto,但它很新,在IE中不受支持.像sjcl这样的解决方案使用鼠标来添加熵.

我知道,鉴于一个完美的RNG,2 122随机UID 碰撞的可能性很小,但是我担心我实际上不会在javascript或flash客户端中获得这种程度的随机性.我还担心即使是加密RNG的典型用例也与我的不同:对于会话密钥等,只要攻击者无法预测,冲突就是可以接受的.就我而言,碰撞是完全不可接受的. 我真的应该依靠安全RNG的原始输出来获取唯一ID吗?

生成包含系统,会话和对象ID 的组合 ID.

一个明显的实现是在服务器安装时创建系统UUID,保持每个客户端登录会话ID(例如在数据库中),然后将系统和会话ID发送到客户端,这将保持每个会话计数器.uid将是三元组:系统ID,会话ID,客户端计数器.

我可以想象直接连接这些或用加密哈希对它们进行哈希处理.我担心散列本身可能会引入冲突,特别是如果散列的输入与输出大小相同.但哈希会掩盖系统ID和计数器,这可能会泄漏信息.

而不是在安装时生成系统ID,另一个解决方案是拥有一个中央注册表,分发出独特的系统ID,就像DOI所做的那样.然而,这需要更多的协调,但我认为这是真正保证全球统一的唯一方法.

关键问题

  • 随机还是复合?
  • 包括系统ID?
  • 如果系统ID:生成随机系统ID或使用中央注册表?
  • 包括时间戳或其他一些nonce?
  • 哈希还是不哈希?

javascript java flash guid

12
推荐指数
1
解决办法
7159
查看次数

运行shell_plus虽然PyCharm?

有没有办法让我配置PyCharm来运行shell_plus而不是默认的shell?

我已经尝试将manage命令的文本放在'Starting script'中,但后来我得到了django_manage_shell.run("/ Users/cmason/counsyl/code/website/counsyl/product")import os import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

    # The new Django 1.4 default manage.py wants "from django..." before
    # importing settings, but we usually tinker with sys.path in
    # settings_local.py, which is called from settings.py. Importing
    # settings.py works but does mean some double importing. Luckily that
    # module does very little work.
    import settings
    # appease pyflakes; don't ever do this in
    # non-super-meta-namespace-trickery code
    settings

    from django.core.management import execute_from_command_line

    execute_from_command_line("shellplus") …
Run Code Online (Sandbox Code Playgroud)

python django pycharm

10
推荐指数
4
解决办法
2252
查看次数

如何在堆栈上对齐缓冲区?

我正在尝试实现一个与其大小对齐的内存缓冲区,以便我可以使用DMA控制器的模数功能来实现环形缓冲区.我知道我可以用memalign做到这一点,但我想知道它是否可能在堆栈上这样做,因为到目前为止我已经能够避免动态内存.我正在使用GCC 4.4.1,我不关心可移植性(嵌入式系统).

我想做的事情如下:

template<uint16_t num_channels, uint16_t buffer_size>
class sampler {
    __attribute__((aligned(buffer_size * num_channels * 2)))
    uint16_t buffer[buffer_size][num_channels];
};
Run Code Online (Sandbox Code Playgroud)

但是GCC当然不接受非恒定对齐(并且似乎表明对齐> 8可能无法兑现).

我想我可以使用C++ 0x alignas()来实现这一点,但它似乎在版本4.8之前没有出现在GCC中.

我想一个选项可能是将缓冲区的大小加倍,但这似乎浪费了一大堆空间(我打算尝试将大部分设备内存用于此缓冲区).也许我应该放弃并使用动态内存.在浪费的空间方面,memalign会相对有效吗?

有任何想法吗?

c++ embedded gcc

5
推荐指数
1
解决办法
995
查看次数

标签 统计

c++ ×1

django ×1

embedded ×1

flash ×1

gcc ×1

guid ×1

java ×1

javascript ×1

pycharm ×1

python ×1