Usando o MD5 hash em uma string no cacau?

Duplicar Possível:
Algoritmo MD5 no Objective C

Eu preciso hash uma string usando a técnica MD5 no cacau. Qualquer framework usado deve poder ser acessado no iphone. por favor, forneça código, se possível.

Bem, em primeiro lugar, o MD5 não é criptografia. Então, se você está procurando por criptografia, está procurando no lugar errado.

Mas se você quiser apenas criar um hash usando o MD5 em um iPhone, isso deve fornecer as informações necessárias:

#import  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); 

(De calcular o MD5 no iPhone )

Percebeu isso no código-fonte do Facebook Connect. Parece bem sólido, dê uma chance.

 #import  ... + (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 

Isso é o que eu uso. Créditos vão para Alistair McMillan .

 #import  + (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] ]; } 

OBSERVAÇÃO # 1: não precisei vincular a nenhuma biblioteca

NOTA # 2: Eu não consegui encontrar -lcrypto na lista de estruturas externas no iPhone, e isso funciona sem -lcrypto

Vale a pena mencionar que os methods OpenSSL estão obsoletos nas versões mais recentes do OS X, e o resumo MD5 é convencionalmente minúsculas. Pessoalmente eu sou mais um fã do estilo desenrolado por eficiência, e eu acho que usar categorias ObjC para isso é um ajuste melhor.

Para MD5Digest.h: #include

 @interface NSString (MD5Digest) - (NSString*) md5Digest; @end @interface NSData (MD5Digest) - (NSString*) md5Digest; @end 

E MD5Digest.m:

 #include  #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 

Adicionei o seguinte à minha categoria “NSString + MyGoonk”:

 #include  - (NSString *)md5 { NSData *data = [self dataUsingEncoding: NSUTF8StringEncoding]; unsigned char *digest = MD5([data bytes], [data length], NULL); return [NSString stringWithUTF8String: (char *)digest]; } 

Duas coisas:

  1. isso pressupõe que sua string seja UTF8. Tenho certeza de que há uma maneira de torná-lo mais genérico, mas quase nunca uso mais nada.

  2. você tem que vincular -liptografar em seu projeto.

Depois de passar muito tempo tentando descobrir isso, fiz um post abrangente com o código correto e como usá-lo. Você pode encontrar o post aqui no meu blog. http://www.saobart.com/md5-has-in-objective-c/

MD5 não é criptografia, é uma function hash criptográfica . É uma function unidirecional cuja saída é um número de 128 bits. O fato de ser criptográfico significa que é um problema computacionalmente difícil que, dada uma saída hash MD5, compute uma string cujo MD5 é esse valor. Portanto, o MD5 pode ser usado para verificações de integridade de dados, mas não para criptografia.