0

我正在尝试将 HMAC(散列数据)转换为对 url 安全的字符串以进行身份​​验证。

我在将 sha256 散列(使用苹果加密库)生成的数据转换为小端和大端的 Unicode 时遇到问题,一个散列字符串可以大而不是小,反之亦然,适用于不同的散列字符串。对于一些散列字符串,它工作得很好。我认为这可能与超出范围的字符或其他东西有关。当我说它不起作用时,我的意思是它返回 nil。

代码如下所示:

NSString *mystring = [[NSString alloc] initWithData:myHash encoding:NSUnicodeEncoding

Unicode 是最好用的吗?我尝试编码为 UTF8,它返回 nil 并且 ascii 没有所有字符,我得到一些“?” 数据丢失的地方。

真的,我的问题是,我如何从 NSData 从 sha256 哈希中创建一个字符串?


解决方案:

https://github.com/eczarny/xmlrpc

NSData+Base64.h 和 NSData+Base64.m

4

1 回答 1

1

您首先需要从 HMAC 字节中创建一个十六进制字符串。你可以这样:

void bytes_to_hexstring(void *uuid, char *hex_string, size_t osize) {
    static const char hexdigits[] = "0123456789ABCDEF";
    const unsigned char* bytes = (unsigned char *)uuid;

    int i = 0;
    for (i = 0; i<osize; ++i) {
        const unsigned char c = *bytes++;
        *hex_string++ = hexdigits[(c >> 4) & 0xF];
        *hex_string++ = hexdigits[(c ) & 0xF];
    }
    *hex_string = 0;
}

char *mystring = malloc(41);
bytes_to_hexstring(myHash, mystring, 20);

something like this.
于 2012-04-16T10:52:13.183 回答