J'ai la fonction Objective-C suivant:Essayer d'écrire NSString fonction SHA1, mais il est de retour nul
+(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;
}
Ce que je suis en train de faire est de prendre une NSString et SHA1 encoder. Cette partie semble fonctionner, je pense que je tombe sur comment convertir l'objet NSData en une chaîne lisible. Si j'utilise l'encodage UTF8, je deviens vide, si je dis ASCII, j'obtiens des caractères étranges. Ce que je veux vraiment c'est la chaîne hexagonale, mais je n'ai aucune idée de comment l'obtenir. Ceci utilise le SDK iPhone 3.0.
Au moment où la chaîne que je passe passe à NULL.
Problème séparé: ceci est mieux implémenté en tant que catégorie sur NSString plutôt que comme méthode de classe. La méthode serait - (NSString *) sha1String. Si vous trouvez que vous voulez garder une méthode de classe, il devrait avoir un nom comme + (NSString *) sha1StringForString: (NSString *) chaîne. La confusion entre un "sha1" (qui est une représentation binaire), et un sha1String est exactement pourquoi vous avez eu des problèmes en premier lieu. Une dénomination appropriée aidera à prévenir toute confusion ultérieure du même type. –