当前位置: 首页 > 知识库问答 >
问题:

碰撞的可能性

邓韬
2023-03-14

我想散列一个内部帐号,并将结果用作帐户记录的唯一公共标识符。标识符限制为40个字符。我有大约250条具有唯一帐号的记录。

什么不太可能导致碰撞。

    < li >取账号SHA-256哈希的SHA-1。 < li >取账号的SHA-256,挑出40个字符。

共有2个答案

常朗
2023-03-14

一个40个字符的ID是320位,这给了你足够的空间。只有250条记录,您可以轻松地将一个独特的计数器放入其中。三位数字只有24位,您可以使用000到999的范围。用SHA-256散列的一部分的十六进制表达式填充ID的其余部分。对于一个3位数的ID,它为十六进制保留37位,覆盖Sha-256输出的37*4=148位。

您可能希望将计数器放在十六进制字符串的中间固定位置,而不是开头或结尾,以使其不那么明显。

<11 hex chars><3 digit ID><26 hex chars>
孔和风
2023-03-14

这些方法是相同的 (*),因此您应该使用第二种方法。没有理由将 SHA-1 注入系统。从SHA-256中选择的任何位都是独立的,并且“实际上是随机的”。

另一种可能方便的解决方案是将它们转换为v5 UUID。如果您对名称空间保密(这是允许的),这可能是执行您所描述的操作的非常好的方法。

(*)在这里使用“字符”而不是html" target="_blank">字节这一事实有一些微妙之处,通过使用比您可能使用的更好的编码,您可以在 40 个“字符”中获得更大的空间。根据您实际编码的方式,空格可能会略有不同。但这并不重要。这些空间是巨大的,这两种方法在实践中是相同的,所以使用只需要一种算法的方法。

另一种可能更好地满足您需求的方法是扩展标识符。如果空间足够稀疏(即,如果可能标识符的数量显著大于实际使用的标识符的数量),那么像PBKDF2这样的拉伸算法被设计为正好处理这一点。它们的计算成本很高,但您可以调整它们的成本以满足您的安全要求。

仅仅散列的一般问题是散列非常快,如果可能的标识符空间非常小,那么很容易使用暴力。拉伸算法使得猜测的成本非常昂贵,因此大空间对于暴力来说是不切实际的。他们这样做不需要任何秘密,这很好。一般方法是:

  • 选择一个“盐”值。这是可以公开的。没关系。对于此特定用例,由于每个帐号都不同,因此您可以选择单个全局 salt。(如果受保护的数据可能相同,则每条记录使用不同的盐非常重要。
  • 计算 PBKDF2(盐、迭代、长度、有效负载)

迭代次数决定了该操作的速度。输出是“有效随机的”(就像散列一样),可以以同样的方式使用。

迭代的一个常见目标是提供大约80-100ms的值。这在服务器上相当快,但对于暴力强制的大空间来说非常慢,即使攻击者拥有比您更好的硬件。理想情况下,你的空间应该至少需要数百万年的时间来进行暴力(认真地说,这是我们通常喜欢的安全空间;我个人的目标是数万亿年)。如果它小于几年,那么可能会通过向它扔更多的硬件来快速强制它。

(当然,所有这些选择都可以根据您的攻击模型进行调整。这取决于您希望攻击的专注程度和资金来源。)

 类似资料:
  • 我正在尝试做一个平台游戏,其中没有斜坡。我正在尝试将碰撞检测降下来,但是我在pygame中找不到一种方法来获得哪一边与另一个Sprite发生了碰撞。有没有人能给我一个好的方法来做到这一点,那不是太庞大,但也能很好地工作在我的情况? 下面是我的玩家类: 我已经将它添加到我的player类中,每次播放器更新时我都运行它,并且它工作...差一点。 在平台顶部的碰撞起作用,在侧面的碰撞几乎总是起作用,除非

  • 我已经寻找并找到了单个碰撞的答案,但我正在寻找一种检测多种类型的碰撞的方法。我正在制作一个游戏,其中有3个我想要的碰撞。用户飞机与敌方子弹相撞,用户子弹与敌机相撞(我已经工作过),敌方子弹与用户子弹相撞。我已经设置并更正了所有类别BitMask和contactTestBitMask。这是我的委托方法。

  • 你是否看到过车祸?是否跟什么物体相撞过?就像车的相撞一样,刚体对象也可以互相碰撞,当它们互相接触的时候,就认为发生了碰撞。当碰撞发生时,会触发一系列事件,它可以被完全忽略。 碰撞筛选 碰撞筛选允许你启用或者阻止形状之间碰撞的发生,引擎支持使用类型,组位掩码来进行碰撞筛选。 Cocos2d-x 有 32 个支持的碰撞类型,对于每个形状都可以指定其所属的类型。还可以指定有哪些类型可以与这个形状进行碰撞

  • 在get_hit=pyGame.sprite的第82行,我检查sprite碰撞的移动时,它会给出错误提示:“:File”c:\Users\pc\VS_PYTHON_PY\pyGame.PY“。”。spritecollide(Player,敌方,True)文件“C:\python py\lib\site packages\pygame\sprite.py”,第1682行,位于spritecrolli

  • 我正在做一个类似生存的游戏,我有两种类型的碰撞,一种是玩家的敌人,另一种是敌人身上的子弹。我也有一个健康栏,由于某些原因,在picbox被移除后,健康仍然下降,就像敌人与玩家互动一样。 这是子弹碰撞代码的一个块(所有8个方向的所有代码都是相同的) 这是敌方与玩家碰撞的暗号

  • 我在我的自上而下的游戏中实现了一个简单的基于瓷砖的碰撞系统,但是我在跨角移动方面遇到了问题。目前,我的程序采取了玩家的中心点,并在一个20px的正方形网格(交替的灰色背景)上做出一个瓷砖。它检查上、下、左、右贴图是否有冲突,如果找到冲突,它就进入下一个阶段。 下一个阶段是检查玩家在瓷砖内的位置。为此,我有一个名为的函数(我知道有创意的名字)。这将返回从瓷砖的中心点到玩家的中心点的距离的向量2i(x