security - 哈希和 'brute-force' 排列

标签 security hash permutation

所以这是一个由两部分组成的问题:

  1. 是否有任何哈希函数可以保证对于相同长度的任意组合,它们都会生成唯一哈希值?我记得 - 大多数都是这样,但我只需要确认这一点。

  2. 基于第一个问题 - 因此,给定文件哈希和长度 - 理论上是否可以“强力”相同长度的所有字节排列,直到生成相同的哈希 - 即。原始文件已重新创建?

PS。我知道这将需要很长时间(如果理论上可能的话),但我认为这对于小文件(大小 < 1KB)是可行的

最佳答案

1KB,那就是 1000^256,对吧? 1000 种可能的字节组合(每种有 256 种配置?)。这是一个真正的大数字。 1 后面有 768 个 0。

如果您要生成所有这些,其中一个是正确的,但会发生一定数量的冲突。

根据这个security.SE post ,md5(例如)的碰撞率约为 2^64 中的 1。那么,如果我们将原始数字除以该数字,我们会得到多少种可能的组合,对吗? http://www.wolframalpha.com/input/?i=1000%5E256+%2F+2%5E64

~5.42 × 10^748

还有很多文件需要检查。

如果有人在这里批评我的数学,我会感觉好多了,但关键是你的第一点由于冲突而不正确。您可以使用相同的排序数学来计算具有相同哈希值的两个 1000 个字符的密码。这是birthday problem 。给定 2 个人,我们不太可能有相同的生日,但如果你住满一个房间,任何两个人有相同生日的可能性会很快增加。如果您使用全部 1000 个字符的密码,其中一些密码将会发生冲突。您将从 X 字节变为 16 字节。您无法将所有组合放入 16 个字节中。

关于security - 哈希和 'brute-force' 排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25501714/

相关文章:

security - 非破坏性散列后处理是个好主意吗?

ruby - ruby 可以深入搜索特定键的哈希/数组吗?

php - 有效计算集合中的唯一排列

performance - 通过数组操作高效搜索包含子排列的排列?

security - 我在哪里对密码进行加盐和哈希处理?在客户端还是在主机?

c# - 安全问题 IIS7.5/IIS APPPOOL\user 未授权但具有完全控制权?

ruby - 相对于数组顺序替换哈希的所有值

algorithm - 避免排列模式 - 在没有 231 方案的情况下打印所有排列

python - 使用python生成促销代码

security - 在 Azure Active Directory B2C 中传递 id_token 的安全方式