Answers:
我会坚持使用众所周知的MD5实现,并远离从第三方供应商那里找到的库。描述MD5 的原始RFC 1321具有示例C实现。
提醒:MD5的已知弱点是冲突攻击,而不是原 像攻击,因此它适用于某些加密应用程序,但不适用于其他加密应用程序。如果您不知道它们之间的区别,那么就不应该使用它,但是不要完全丢弃它。参见http://www.vpnc.org/hash.html。
您可以在http://en.wikipedia.org/wiki/MD5上找到有关MD5算法维基百科的良好描述和一些伪代码。
您还可以考虑在Stackoverflow上发布此问题,因为它更适合于编程问题。
从MD5的Wikipedia页面上:
……已经证明MD5不能抗碰撞,MD5不适合依赖此属性的应用程序,例如SSL证书或数字签名。
和同一页面上的SSL研究人员:
我们也希望也将重新考虑在其他应用程序中使用MD5。
我了解您可能不想听到此消息,但是您真的需要MD5吗?它不应该用于加密目的,因为它太不安全了(并且有很多彩虹表可用)。如果您正在寻找仅用于验证数据的内容,请查看计算成本更低的CRC(此处代码)。但是,如果您将其用于加密目的,那么我建议您使用SHA吗?唯一的问题是,大多数加密安全算法在微控制器上的运行效果都不佳。我知道MD5似乎“足够好”,但工程方法是要谨慎一点。