Xcode C++ MD5 哈希

Posted

技术标签:

【中文标题】Xcode C++ MD5 哈希【英文标题】:Xcode C++ MD5 hash 【发布时间】:2017-01-12 01:17:55 【问题描述】:

我想在 Xcode c++ 中使用 MD5 散列一个简单的字符串。我搜索了很多,但我找不到教程。我必须#import <CommonCrypto/CommonDigest.h>。这就是全部?之后如何调用MD5? 我找到了这段代码,但它给了我一个错误。如何在字符串变量中更新哈希值?

 unsigned char digest[16];
 const char* string = "Hello World";
 struct MD5Context context;     **(error: variable has incomplete type
 MD5Init(&context);
 MD5Update(&context, string, strlen(string));
 MD5Final(digest, &context);

我只是使用一个简单的命令行应用程序,在基本的 main.cpp 中没有标题。 我真的很感谢任何帮助!!!!

【问题讨论】:

#include 可能会让你的 C++ 编译器更快乐,就像使用正确的函数名称和类型一样。 CC 的东西都是以 CC_ 开头的。 啊,谢谢,是的,我在 obj C 中是我的错。 谢谢你我找到了这本手册并按照你的建议进行了更新。但我仍然得到变量的错误。我是否必须包含其他库? developer.apple.com/legacy/library/documentation/Darwin/… Apple 不久前放弃了对 OpenSSL 的支持。它仍然存在,但他们希望您使用 CC 代替(不能真正责怪他们)。 CC 库已经存在了一段时间,它们的使用类似于 ObjC 中的代码。如果您仍然有错误,请使用包含新代码的附录 更新您的问题,更重要的是,包含确切的错误消息。理想情况下,您的代码应该类似于以下答案之一。 非常感谢你太棒了!有用!! :) 【参考方案1】:

您使用了错误的 API。我不确定你从哪里得到这些(它们看起来像 OpenSSL 调用),但它应该看起来像这样:

#include <stdio.h>
#include <string.h>

#include <CommonCrypto/CommonDigest.h>

int main()

    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    const char string[] = "Hello World";

    CC_MD5_CTX context;
    CC_MD5_Init(&context);
    CC_MD5_Update(&context, string, (CC_LONG)strlen(string));
    CC_MD5_Final(digest, &context);

    for (size_t i=0; i<CC_MD5_DIGEST_LENGTH; ++i)
        printf("%.2x", digest[i]);
    fputc('\n', stdout);
    return 0;

输出

b10a8db164e0754105b7a99be72e3fe5

验证here。

【讨论】:

【参考方案2】:

有一个一次性版本:

#include <CommonCrypto/CommonDigest.h>

unsigned char digest[16];
const char* string = "Hello World";

CC_MD5(string, (CC_LONG)strlen(string), digest);

您需要包含 Security.framework(或至少适用的库文件)。

【讨论】:

感谢您的回答!我也尝试了您的解决方案,但它给出了一条错误消息:“隐式转换丢失整数精度 unsigned long,到 unsigned int。它指向最后一行的 strlen(string)。如果我添加 (CC_LONG)strlen(string) 它修复错误。但是如果我尝试打印摘要,它会给我一些疯狂的东西,例如:\261 \215\261d\......我已经包含了这些:#include #include #include #include . 对,需要一些演员表,已修复。 MD5 返回数据并且大多数数据值不是 ASCII,如果您需要 ASCII 输出,可以编码为十六进制或 Base64。 是的,我需要十六进制。如何按照您的建议直接告诉 MD5 fn 为我输出十六进制?通常我会尝试转换输出,但我不知道我从什么转换。感谢您的帮助! 如果我像 WhozCraig 一样将其打印出来,效果会很好!我只是不知道如何将它存储在十六进制的变量中,似乎没有任何作用:( 你打算如何使用它?我通常需要它以数据形式传递给另一个方法。

以上是关于Xcode C++ MD5 哈希的主要内容,如果未能解决你的问题,请参考以下文章

为啥当我在 MD5 哈希中转换相同的 C++ 字符串时,每次都会获得不同的输出?

制作哈希的 md5 哈希

C# 中的 MD5 哈希与动作脚本中的 MD5 哈希不匹配

哈希算法之md5和sha1

C ++和PHP通用密码哈希标准

批处理命令怎么校验文件MD5哈希值?