【问题标题】:A 16-digit hashing function一个 16 位的散列函数
【发布时间】:2011-01-27 12:16:38
【问题描述】:

是否有一个返回 16 位十六进制值的哈希函数(因为 MD5 返回 32 位),或者是否有一个库(用于 C++),我可以在其中使用返回 16 位的 MD5 或 SHA-1价值

【问题讨论】:

  • 在您之前的问题中,您提到您希望将哈希值存储在 16 个字符而不是 16 位十六进制值中。 16 个字符是 128 位,这与使用 MD5 创建的哈希值的位数相同,因此如果您实际使用字符,您应该能够将整个 MD5 哈希值放入其中。

标签: c++ hash openssl md5 sha1


【解决方案1】:

如果您截断加密哈希函数的大小,您将破坏它 - 我的意思是您很可能会损坏使其加密安全的属性。如果加密属性对您不重要,那么您根本不需要加密哈希 - 您最好使用 checksumnon-cryptographic hash

无论你在做什么,都不要使用 md5。如果您需要加密哈希函数,md5 不是一个好的选择,因为存在在合理时间内创建冲突的算法。如果您不需要加密哈希函数,那么 md5 就大材小用了。

【讨论】:

    【解决方案2】:

    是否有一个库(用于 C++),我可以在其中使用返回 16 位值的 MD5 或 SHA-1

    查找 OpenSSL crypto 库(免费)或 RSA BSAFE(付费)。

    【讨论】:

    • 您能否提供一个示例,说明如何使用加密库将哈希从 32 位截断为 16 位
    【解决方案3】:

    由于您愿意忍受更高的冲突率,您可以截断数据的 MD5 哈希值。

    【讨论】:

    • 与返回 16^16 个唯一字符串的哈希相比,这会不会产生更高的冲突率
    • 勉强。无论哪种方式,碰撞的几率大约为 30.6e12 分之一,这并不是那么令人印象深刻。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-30
    • 2013-12-12
    • 2013-07-12
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多