Calculer un hash MD5

Pour ceux qui ne la connaissent pas, MD5 est une méthode permettant d’obtenir une empreinte numérique unique d’un message (au sens large du terme: chaine de caractère ou fichier). Cet algorithme a longtemps été utilisé à des fins de sécurité. Au risque de me répéter: n’utilisez pas MD5 à des fins de sécurité ! Cet algorithme est maintenant faible. Plus d’informations sur Wikipedia EN.

MD5 peut être utilisé pour générer une clef « unique » à partir d’une chaine de caractères. Exemple concret: j’ai des objets représentant des rendez-vous qui naviguent un peu partout (SQLite local, serveur de calendrier distant, …). Il me faut à tout moment pouvoir identifier uniquement un rendez-vous. La solution que j’ai choisi est de générer une somme MD5 à partir du titre du rendez-vous, de la date de création et l’UDID (voir Comment récupérer l’UDID). Voici l’implémentation que j’utilise pour générer mes MD5 (dans le cas présent, c’est une addition de NSString):

//
//  NSStringAdditions.h
//  iMeeting
//
//  Created by Julien on 12/05/09.
//
 
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
 
 
@interface NSString (NSStringAdditions)  
- (NSString *)md5Hash;
 
@end
//
//  NSStringAdditions.m
//  iMeeting
//
//  Created by Julien on 12/05/09.
//
 
#import "NSStringAdditions.h"
 
 
@implementation  NSString (NSStringAdditions)  
- (NSString *)md5Hash
{
	const char *cStr = [self 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]
			];
}
@end

Et un exemple simple d’utilisation:

NSString *maChaine = [NSString stringWithString:@"MaChaineAMoi"]:
NSString *monMd5 = [maChaine md5Hash];

Cette entrée a été publiée dans Article, avec comme mot(s)-clef(s) , , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>