0

HMAC(ハッシュデータ)を認証目的でURLに対して安全な文字列に変換しようとしています。

(apples暗号ライブラリを使用して)sha256ハッシュから生成されたデータをリトルエンディアンとビッグエンディアンの両方でUnicodeに変換する際に問題が発生しました。あるハッシュ文字列は大きくても小さくはなく、別のハッシュ文字列ではその逆になります。一部のハッシュ文字列では、完全に機能します。範囲外のキャラクターか何かと関係があるのではないかと思います。私がそれが機能しないと言うとき、私はそれがnilを返すことを意味します。

コードは次のようになります。

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

Unicodeを使用するのが最適ですか?UTF8にエンコードしてみましたが、nilが返され、ASCIIにはすべての文字が含まれていません。いくつかの「?」が表示されます。データが欠落している場所。

本当に、私の質問は、sha256ハッシュからNSDataから文字列を作成するにはどうすればよいですか?


解決:

https://github.com/eczarny/xmlrpc

NSData+Base64.hおよびNSData+Base64.m

4

1 に答える 1

1

まず、HMACバイトから16進文字列を作成する必要があります。あなたはそれをこのようにすることができます:

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 に答える