2016-08-09 63 views
-1

Sind die Hash-Funktionen in Apples Common Crypto und OpenSSL anders? Ich versuche, SHA256 der gleichen Zeichenfolge mit den beiden folgenden Methoden zu generieren, und beide produzieren unterschiedliche Ergebnisse. Mache ich etwas anderes? Ich habe den Eindruck, dass der SHA256-Algorithmus ist plattformübergreifend und das gleiche Ergebnis in iOS, Android, Windows usw.SHA256 Hash-Algorithmus produziert verschiedene Ergebnisse in iOS mit Common Crypto und OpenSSL

Hinweis: Wenn ich das gleiche in Android versucht mit MessageDigest.getInstance ("SHA-256") Ich habe das gleiche Ergebnis wie das CommonCrypto Hash-Ergebnis, aber das OpenSSL-Ergebnis ist anders.

// Apple Common Crypto - SHA256 
- (NSData *)sha256:(NSData *)data { 
    unsigned char hashResult[CC_SHA256_DIGEST_LENGTH]; 
    if (CC_SHA256([data bytes], (unsigned int)[data length], hashResult)) { 
     NSData *sha256 = [NSData dataWithBytes:hashResult length:CC_SHA256_DIGEST_LENGTH]; 
     return sha256; 
    } 
} 

// SRP OpenSSL - SHA256 
- (NSData *)sha256_2:(NSData *)data { 
    unsigned char hashResult[SHA256_DIGEST_LENGTH]; 
    unsigned char *bin = (unsigned char *) [data bytes]; 
    NSInteger length = sizeof(bin); 
    [_srpAuth hashWrapper:SRP_SHA256 input:bin size:length output:hashResult]; 
    NSData *sha256 = [NSData dataWithBytes:hashResult length:SHA256_DIGEST_LENGTH]; 
    return sha256; 
} 
+0

welchen Wert gehasht werden Sie für 'length' im Fall openSSL bekommen? – Paulw11

+0

Wie die anderen Hash-Ergebnisse (32 Byte). iOS CC/Android/MacOS OpenSSL Cmd-Zeile Hash-Ergebnis: <2910ff11 5706d967 044d624a 3a63c0ae 7ae5c5bf b5442372 e47f717d 94b5c18c>. Während OpenSSL Hash-Ergebnis: <6a382a3e f2034daf 1fbbc457 23dfeb24 123b112b ca2a14c0 27c5b9d9 8db6e996> – Harish

+0

Sind Sie sicher? 'sizeof (bin)' sollte 4 auf einem 32-Bit-Gerät und 8 auf einem 64-Bit-Gerät geben. Wahrscheinlich willst du 'length = data.length;' – Paulw11

Antwort

2
NSInteger length = sizeof(bin); 

Will man die Größe eines unsigned char Zeiger geben - 4 Bytes auf einem 32 Bit-Gerät und 8 auf einem 64-Bit.

Was Sie wollen, ist

NSInteger length = data.length 

wie werden Sie die Anzahl der Bytes geben