使用操作系统

时间:2018-02-21 08:04:48

标签: c++ macos hash cryptography objective-c++

对于我们的C / C ++应用程序,我们使用Security Transforms API进行一些基本的加密/解密 现在我们需要计算数据的哈希值(特别是SHA256),虽然文档声称安全转换也提供了一种散列方式,但似乎没有关于如何执行此操作的详细信息。似乎谷歌也没有提供任何示例或细节。
所以问题是:
是否真的可以使用安全性转换计算哈希值(如果可能的话,SHA256)? 如果不是,那么是否有其他API(由Apple提供)使用C / C ++计算它?

2 个答案:

答案 0 :(得分:2)

我不知道安全转换。不过,您可以使用Apple的CommonCrypto库。

奇怪的是,CommonCrypto的大部分内容似乎没有得到很好的记录(至少我能找到),但在https://opensource.apple.com//source/CommonCrypto/CommonCrypto-7/CommonCrypto/CommonDigest.h.auto.html中找到以下声明:

extern int CC_SHA256_Init(CC_SHA256_CTX *c);
extern int CC_SHA256_Update(CC_SHA256_CTX *c, const void *data, CC_LONG len);
extern int CC_SHA256_Final(unsigned char *md, CC_SHA256_CTX *c);

答案 1 :(得分:0)

经过深入研究后发现它与Security Transforms API 可能虽然没有记录。为了使其工作,使用AES encryption制作了SecDigestTransformCreate的样本,并使用了可用散列算法列表there

这是一个C和C ++友好的解决方案:

SecDigestTransformCreate(kSecDigestSHA2, 256, &error);

注意:
为了使用任何其他散列算法而不是SHA256,请随时修改该行:
{{1}}
使用所需的可用散列算法name和适当的长度。

PS希望,Apple将会更新他们的文档...