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