Ho la seguente funzione di Objective-C:cercando di scrivere NSString funzione SHA1, ma è il ritorno nullo
+(NSString *)stringToSha1:(NSString *)str{
NSMutableData *dataToHash = [[NSMutableData alloc] init];
[dataToHash appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
CC_SHA1([dataToHash bytes], [dataToHash length], hashBytes);
NSData *encodedData = [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
[dataToHash release];
NSString *encodedStr = [NSString stringWithUTF8String:[encodedData bytes]];
//NSString *encodedStr = [[NSString alloc] initWithBytes:[encodedData bytes]
// length:[encodedData length] encoding: NSUTF8StringEncoding];
NSLog(@"String is %@", encodedStr);
return encodedStr;
}
Quello che sto cercando di fare è prendere un NSString e SHA1 codificarlo. Sembra che quella parte funzioni, penso che dove sto cadendo sia come convertire l'oggetto NSData in una stringa leggibile. Se uso la codifica UTF8 divento vuoto, se dico ASCII ottengo strani caratteri. Quello che voglio veramente è la stringa esadecimale, ma non ho idea di come ottenerlo. Questo è l'utilizzo dell'SDK dell'iPhone 3.0.
Al momento in cui una stringa I passa torna indietro NULL.
Problema distinto: questo è meglio implementato come categoria su NSString piuttosto che un metodo di classe. Il metodo sarebbe - (NSString *) sha1String. Se si scopre di voler mantenere un metodo di classe, dovrebbe avere un nome come + (NSString *) sha1StringForString: (NSString *) stringa. La confusione tra una "sha1" (che è una rappresentazione binaria) e una sha1String è esattamente il motivo per cui hai avuto problemi in primo luogo. La corretta denominazione aiuterà a prevenire successive confusioni dello stesso tipo. –