Стоит отметить, что методы OpenSSL являются устаревшими на более поздних версиях OS X, и MD5 дайджест обычно в нижнем регистре. Лично я больше поклонник разворачиваемого стиля для эффективности, и я думаю, что использование категорий ObjC для этого лучше подходит.
Для MD5Digest.ч: #include
@interface NSString (MD5Digest)
- (NSString*) md5Digest;
@end
@interface NSData (MD5Digest)
- (NSString*) md5Digest;
@end
И 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
, если это возможно, не используйте md5 но и SHA-хеш. MD5 считается сломанным. –
MD5 не «сломан», есть одна конкретная уязвимость, которая позволяет создать конфликт, когда у вас уже есть довольно много информации об хэшируемых данных. Это по-прежнему абсолютно правильный выбор для приложений, таких как проверка паролей (хотя использование соли всегда является хорошей идеей). –
Использование MD5 для криптографических целей неразумно. Вот как можно реплицировать хеш MD5: http://www.mscs.dal.ca/~selinger/md5collision/ Эти инструменты занимают несколько часов в поле класса ПК. Вот, как подделать цифровой сертификат MD5: http://www.schneier.com/crypto-gram-0901.html Подробнее об атаках: http://www.schneier.com/blog/ архивы/2005/06/more_md5_collis.html –