我正在寻找一个行为与 PHP 的 md5() 函数相同的 C/C++ 函数——传入一个字符串,返回该字符串的单向哈希。我也对 md5() 以外的其他算法持开放态度,前提是它们同样安全(或更安全)、相当快且理想情况下是单向的。
我搜索所述函数的原因与我使用 PHP 的 md5() 函数的目的相同:将用户密码的单向哈希存储在数据库中,而不是用户密码的实际文本(如果数据库的数据被泄露,用户的密码仍然是相对保密的)。
我现在花了大约两个小时搜索。我发现的所有代码要么用于获取文件数据的 MD5(而不仅仅是一个字符串),要么无法编译,要么用于另一种编程语言,要么需要整个库(例如 Crypto++、OpenSSL、hashlib++)来被添加到我的项目中,其中一些非常大(当我想要的只是一个单向字符串散列函数时,真的有必要吗?)。
鉴于这是一种常见的需求,我假设有人已经编写并提供了我正在寻找的东西..有人可以指出我吗?
提前致谢。
原文由 Josh1billion 发布,翻译遵循 CC BY-SA 4.0 许可协议
说真的,使用一个库(OpenSSL 是一个不错的选择)。它们经过了很好的测试,您可以将它们放入您的项目中,而不必担心代码是否正确。不要担心库的大小,您不使用的任何函数都不会包含在最终的可执行文件中。
我还建议避免使用 MD5,因为它具有已知的弱点,而支持更强大的东西,例如 SHA-256 或 Blowfish。
但是,无论您使用哪种算法和实现,都不要忘记给 您的输入加盐!