16

このコードを使用して文字列のsha256を作成すると

unsigned char hashedChars[32];
NSString *inputString;
inputString = [NSString stringWithFormat:@"hello"];
NSData * inputData = [inputString dataUsingEncoding:NSUTF8StringEncoding];
CC_SHA256(inputData.bytes, inputData.length, hashedChars);

ハッシュは正しく返されますが、この\x00\x25\x53のような文字列を挿入する必要があります。この場合、指定されたエンコーディングを使用して受信者を変換できないため、関数は空の文字列の sha256 を返します。

さて、私の質問は次のとおりです。正しいハッシュを生成するためにこの特殊文字を挿入する方法は? ありがとう

4

4 に答える 4

42

これを試してください、それは私のために働いた

1) プレーンテキスト入力のハッシュを取得するには

-(NSString*)sha256HashFor:(NSString*)input
{   
    const char* str = [input UTF8String];
    unsigned char result[CC_SHA256_DIGEST_LENGTH];
    CC_SHA256(str, strlen(str), result);

    NSMutableString *ret = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH*2];
    for(int i = 0; i<CC_SHA256_DIGEST_LENGTH; i++)
    {
        [ret appendFormat:@"%02x",result[i]];
    }
    return ret;
}

NSData2)入力としてハッシュを取得するには

注:-カテゴリを使用NSDataしたため、コードは次のとおりです

    - (NSString *)SHA256_HASH {
    //if (!self) return nil;

    unsigned char hash[CC_SHA256_DIGEST_LENGTH];
    if ( CC_SHA256([(NSData*)self bytes], [(NSData*)self length], hash) ) {
        NSData *sha2 = [NSData dataWithBytes:hash length:CC_SHA256_DIGEST_LENGTH]; 

        // description converts to hex but puts <> around it and spaces every 4 bytes
        NSString *hash = [sha2 description];
        hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
        hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
        hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];
        // hash is now a string with just the 40char hash value in it
        //NSLog(@"hash = %@",hash);

        // Format SHA256 fingerprint like
        // 00:00:00:00:00:00:00:00:00
        int keyLength=[hash length];
        NSString *formattedKey = @"";
        for (int i=0; i<keyLength; i+=2) {
            NSString *substr=[hash substringWithRange:NSMakeRange(i, 2)];
            if (i!=keyLength-2) 
                substr=[substr stringByAppendingString:@":"];
            formattedKey = [formattedKey stringByAppendingString:substr];
        }

        return formattedKey;
    }
    return nil;
}
于 2012-07-11T06:12:45.910 に答える
0

NSDatathenの代わりに使用する必要がありますNSString。その文字列はどこから取得しますか?

于 2010-09-15T13:18:26.403 に答える