Duplicata possible :
Algorithme MD5 en Objective C
Je dois hacher une chaîne de caractères en utilisant la technique MD5 en cacao. Tous les frameworks utilisés doivent être accessibles sur l'iphone. Veuillez fournir le code si possible.
Duplicata possible :
Algorithme MD5 en Objective C
Je dois hacher une chaîne de caractères en utilisant la technique MD5 en cacao. Tous les frameworks utilisés doivent être accessibles sur l'iphone. Veuillez fournir le code si possible.
J'ai remarqué cela dans le code source de Facebook Connect. Cela semble assez solide, essayez-le.
#import <CommonCrypto/CommonDigest.h>
...
+ (NSString*)md5HexDigest:(NSString*)input {
const char* str = [input UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, strlen(str), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
[ret appendFormat:@"%02x",result[i]];
}
return ret;
}
...
Eh bien, tout d'abord, MD5 n'est pas un cryptage. Donc si vous cherchez du cryptage, vous ne cherchez pas au bon endroit.
Mais si vous voulez simplement hacher quelque chose en utilisant MD5 sur un iPhone, cela devrait vous donner les informations dont vous avez besoin :
#import <CommonCrypto/CommonDigest.h>
NSString *md5(NSString *str) {
const char *cStr = [str UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), result );
return [NSString stringWithFormat:@"%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]
];
}
//…
NSString *digest = md5(@"test");
NSLog(@"MD5 TEST %@", digest);
C'est ce que j'utilise. Les crédits vont à Alistair McMillan .
#import <CommonCrypto/CommonDigest.h>
+ (NSString *) md5:(NSString *)str {
const char *cStr = [str UTF8String];
unsigned char result[16];
CC_MD5( cStr, strlen(cStr), result );
return [NSString stringWithFormat:
@"%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]
];
}
NOTE #1 : Je n'ai pas eu à faire de liens vers des bibliothèques.
NOTE #2 : Je n'ai pas trouvé -lcrypto dans la liste des frameworks externes sur l'iphone, et cela fonctionne sans -lcrypto.
Il convient de mentionner que les méthodes OpenSSL sont dépréciées sur les versions plus récentes d'OS X, et que le condensé MD5 est conventionnellement en minuscules. Personnellement, je suis plutôt partisan du style déroulé pour des raisons d'efficacité, et je pense que l'utilisation des catégories ObjC pour cela est plus adaptée.
Pour MD5Digest.h : #include
@interface NSString (MD5Digest)
- (NSString*) md5Digest;
@end
@interface NSData (MD5Digest)
- (NSString*) md5Digest;
@end
Et MD5Digest.m :
#include <CommonCrypto/CommonDigest.h>
#include "MD5Digest.h"
static NSString* md5Digest(const void *data, CC_LONG length)
{
unsigned char digest[CC_MD5_DIGEST_LENGTH];
unsigned char* d = CC_MD5(data, length, digest);
return [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], d[11], d[12], d[13], d[14], d[15],
nil];
}
@implementation NSString (MD5Digest)
- (NSString*) md5Digest
{
return md5Digest([self UTF8String], [self lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
}
@end
@implementation NSData (MD5Digest)
- (NSString*) md5Digest
{
return md5Digest([self bytes], [self length]);
}
@end
J'ai ajouté ce qui suit à ma catégorie "NSString+MyGoonk" :
#include <openssl/md5.h>
- (NSString *)md5
{
NSData *data = [self dataUsingEncoding: NSUTF8StringEncoding];
unsigned char *digest = MD5([data bytes], [data length], NULL);
return [NSString stringWithUTF8String: (char *)digest];
}
Deux choses :
cela suppose que votre chaîne est UTF8. Je suis sûr qu'il y a un moyen de le rendre plus générique, mais je n'utilise presque jamais autre chose.
vous devez lier -lcrypto dans votre projet.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.