NSData to NSString после CC_SHA1 - PullRequest
       8

NSData to NSString после CC_SHA1

3 голосов
/ 02 января 2011

Исходя из этого вопроса Я написал категорию на NSString - hash NSString экземплярах, используя SHA1. Однако с моей реализацией что-то не так. Самое смешное, что регистрация экземпляра NSData действительно дает ожидаемый хеш, но когда я хочу создать NSString из этого экземпляра NSData, я просто получаю ноль.

- (NSString *)sha1 {
    NSData *dataFromString = [self dataUsingEncoding:NSUTF8StringEncoding];
    unsigned char hashed[CC_SHA1_DIGEST_LENGTH];

    if ( CC_SHA1([dataFromString bytes], [dataFromString length], hashed) ) {
        NSData *dataFromDigest = [NSData dataWithBytes:hashed length:CC_SHA1_DIGEST_LENGTH];

        NSString *result = [[NSString alloc] initWithBytes:[dataFromDigest bytes] length:[dataFromDigest length] encoding:NSUTF8StringEncoding];

        return result;

    } else {

        return nil;
    }
}

Спасибо за помощь!

1 Ответ

5 голосов
/ 02 января 2011

Вывод хеш-функции - это просто набор байтов.Вы берете эти байты и, по сути, говорите NSString, что они представляют строку в кодировке UTF8, а они - нет.Получающаяся строка NSString - просто мусор.

Похоже, что вы действительно хотите что-то вроде строки шестнадцатеричных цифр, которые представляют значение хеша?Если это так, я полагаю, вам нужно будет выполнить это самостоятельно, перебирая один байт dataFromDigest и выводя в новую строку NSMutableString правильные шестнадцатеричные цифры в зависимости от значения байта.Вы можете сделать это самостоятельно или использовать некоторый код из Интернета. Комментарий к этому посту выглядит многообещающе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...