Хэш SHA2 Objective-C не работает правильно с не-ASCII - PullRequest
6 голосов
/ 12 декабря 2011

Я использую xcode, и это мой метод sha512:

-(NSString*) sha512:(NSString*)input
{
    const char *cstr = [input cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:input.length];

    uint8_t digest[CC_SHA512_DIGEST_LENGTH];

    CC_SHA512(data.bytes, data.length, digest);

    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];

    for (int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }

    return output;
}

Когда я пытаюсь пройти входной «тест», он возвращает: "Ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff" который совпадает с другими инструментами хэширования sha512 (включая мою программу на Java и "http://hash.online -convert.com / sha512-generator").

Однако, когда я вводю не-ascii-символ, такой как «é», он возвращает что-то отличное от всех моих других инструментов sha512. Для ввода "é" мой метод возвращает: "60313f8521d3016916d876f7ad11cf42a30dfd4ff9bc557f1e2f90e0d37c56b76ab5e42c8a16db20c18086b0d769c08542429c262cc21ee4fba02bfc689a4797" когда другие инструменты (в том числе моя Java-программа и "http://hash.online -convert.com / sha512-generator") возвращают "9e2ad28633f24451bd4f3c1cb20586a21a44c3aeedbdc01b9cc8fa72917ea7bd689c82b8bf1fef89b911d50850c8c8ccfcccccrccccccccccccccccc863408cfccccccccccccccccccccccccc.dll880810640360640860660640888

Я что-то пропустил? Есть идеи по этому поводу? Спасибо!

1 Ответ

4 голосов
/ 12 декабря 2011

Создайте свой NSData объект, подобный этому:

NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];

Просто дважды проверил, и он работает правильно, как это.

...