2014-10-23 3 views
0

Im пытается сделать то же самое Sha1 вне в IOS, но результат не то же самое.IOS sha1 неправильный вывод

Благодаря этому ответу SO она должна быть тонкой и тот же результат

это мой C# Код:

using (SHA1 sha1Hash = SHA1.Create()) 
    { 
      string hash1 = GetSHA1Hash(sha1Hash, "8390495498"); 
    } 

    static string GetSHA1Hash(SHA1 sha1Hash, string input) 
    { 
     byte[] data = sha1_Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); 
     StringBuilder sBuilder = new StringBuilder(); 
     for (int i = 0; i < data.Length; i++) 
     { 
      sBuilder.Append(data[i].ToString("x2")); 
     } 
     return sBuilder.ToString(); 
    } 

результат: d763bd0b5b346a3c95eb4f2912be40c2ce6f0a41

И мой Objective код C:

[sh1obj sha1:@"8390495498"] 
- (NSString *)sha1:(NSString *)str { 
    NSData *data = [str dataUsingEncoding:NSUnicodeStringEncoding]; 

    NSString *unicodePassword = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding]; 
    data = [unicodePassword dataUsingEncoding:NSUnicodeStringEncoding]; 
    data = [NSData dataWithBytes:[data bytes] + 2 length:[data length] - 2]; 

    unsigned char hash[CC_SHA1_DIGEST_LENGTH]; 
    CC_SHA1([data bytes], [data length], hash); 
    NSData *result = [NSData dataWithBytes:hash length:CC_SHA1_DIGEST_LENGTH]; 
    NSLog(@"Result: %@",result); 

    return result; 
} 

результат:241cdda1 6867aaad cb69faed d0975579 f6ec3a07>

я даже попробовал этот тоже:

[sh1obj sha1:@"8390495498"] 
- (NSString *)sha1:(NSString *)str { 

    const char *cStr = [str UTF8String]; 
    unsigned char result[CC_SHA1_DIGEST_LENGTH]; 
    CC_SHA1(cStr, strlen(cStr), result); 
    NSString *s = [NSString stringWithFormat: 
        @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 
        result[0], result[1], result[2], result[3], result[4], 
        result[5], result[6], result[7], 
        result[8], result[9], result[10], result[11], result[12], 
        result[13], result[14], result[15], 
        result[16], result[17], result[18], result[19] 
        ]; 
    NSLog(@"Result: %@",s); 
    return s; 
} 

и результат был: cbdb5d7936ac9a56846cabad5e9d41942a08b49c

+1

Что делает +2 в dataWithBytes? И вы пробовали NSUTF8StringEncoding? – Thilo

+1

И почему вы помещаете NSData обратно в NSString, а затем снова декодируете его? – Thilo

+0

Я пытаюсь удалить спецификацию с помощью «+2». после того, как я перешел на NSUTF8StringEncoding, он дает мне результат третьего метода. если я удалить метод «+2» это дает мне еще sha1:. 0e225a4e 22393d01 a85a44b4 8d5f3ed3 72515a7d на данный момент не знаю, что делать :( –

ответ

1

Я думаю, что код Objective-C является правильным:

$ echo -n 8390495498 | openssl sha1 
cbdb5d7936ac9a56846cabad5e9d41942a08b49c 
+0

у полностью правильно !!! проблема была с входной строкой шифрования C# –

Смежные вопросы