Mar*_*ine 8 algorithm hash cryptography
作为我正在工作的节奏游戏的一部分,我允许用户创建和上传自定义歌曲和记事章.我正在考虑对歌曲和音符表进行哈希处理,以便对它们进行唯一识别.当然,我希望尽可能少的碰撞,但是,密码强度在这里并不是一个很大的均匀范围.另外,由于我很少执行哈希,因此计算效率不是太大的问题.
这是否像选择具有最大摘要大小的经过验证的哈希算法一样简单?或者我应该注意一些错综复杂的问题?我目前正在寻找SHA-256或512.
所有加密强度算法都不应表现出任何冲突。当然,冲突必然存在(可能的输入多于可能的输出),但使用现有的计算技术实际上不可能找到冲突。
当散列函数具有n位输出时,可能会发现与约2 n/2的工作发生冲突,因此在实践中,具有小于约 140 位输出的散列函数在加密上不强。此外,某些哈希函数存在弱点,使攻击者能够更快地发现冲突;这些功能被认为是“损坏的”。一个典型的例子是 MD5。
如果您不在安全环境中,并且只担心随机冲突(即没有人会主动尝试引发冲突,它们可能只是纯粹出于运气不好而发生),那么损坏的加密哈希函数就可以了。通常的建议是MD4。从密码学的角度来说,它已经被破坏得够多了,但对于非密码学的目的来说,它的速度非常快,并且提供 128 位的输出,从而避免了随机冲突。
但是,SHA-256 或 SHA-512 很可能不会出现任何性能问题。在最基本的 PC 上,它们处理数据的速度已经快于硬盘所能提供的速度:如果对文件进行散列,则文件读取将成为瓶颈,而不是散列。我的建议是使用 SHA-256,可能将其输出截断为 128 位(如果在非安全情况下使用),并且仅在适当注意到和测量一些与性能相关的问题时才考虑切换到另一个函数。