c - Objective-C : SHA1

标签 c objective-c hash sha1

我如何在 Objective c 中 sha1 一个字符串或一组数字?

最佳答案

CommonCrypto(一种 Apple 框架)具有计算 SHA-1 哈希值的函数,包括一步哈希值:

#include <CommonCrypto/CommonDigest.h>

unsigned char digest[CC_SHA1_DIGEST_LENGTH];
NSData *stringBytes = [someString dataUsingEncoding: NSUTF8StringEncoding]; /* or some other encoding */
if (CC_SHA1([stringBytes bytes], [stringBytes length], digest)) {
    /* SHA-1 hash has been calculated and stored in 'digest'. */
    ...
}

对于一组数字,让我们假设您指的是已知长度的整数数组。对于这样的数据,迭代构建摘要比使用一次性函数更容易:

unsigned char digest[CC_SHA1_DIGEST_LENGTH];
uint32_t *someIntegers = ...;
size_t numIntegers = ...;

CC_SHA1_CTX ctx;
CC_SHA1_Init(&ctx);
{
    for (size_t i = 0; i < numIntegers; i++)
        CC_SHA1_Update(&ctx, someIntegers + i, sizeof(uint32_t));
}
CC_SHA1_Final(digest, &ctx);

/* SHA-1 hash has been calculated and stored in 'digest'. */
...

请注意,这不考虑字节顺序。在 PowerPC 系统上使用此代码计算的 SHA-1 将不同于在 i386 或 ARM 系统上计算的 SHA-1。解决方案很简单——在进行计算之前将整数的字节交换为已知的字节顺序:

    for (size_t i = 0; i < numIntegers; i++) {
        uint32_t swapped = CFSwapInt32HostToLittle(someIntegers[i]); /* or HostToBig */
        CC_SHA1_Update(&ctx, &swapped, sizeof(swapped));
    }

关于c - Objective-C : SHA1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3468268/

相关文章:

c - 哈希表实现

c - 如何在 C 中存储 10 位浮点值

ios - TableView 中的重复行

c++ - 将 std::string 散列为 std::size_t 以外的东西

php - 在 ajax 调用上设置 window.location.hash

c++ - 为不明确的引用指定

c - 在C中打印出随机数数组

c - 如何将日期字符串转换为 tm 结构中的 tm_wday

iphone - 如何从 AVPlayer(不是 AVAudioPlayer)获取持续时间?

objective-c - OCUnit 中的简化断言