Não se trata de arquivos. Se você deseja criar um MD5 a partir de um arquivo com esses métodos, você pode executar o NSData * fileContents = [NSData dataWithContentsOfFile: @ "<yourPath>"]; NSString * myHash = [fileContents md5]; E sim, isso colocaria o arquivo inteiro na memória. Se você encontrar uma solução que funcione com fluxos de arquivos, poste-a como resposta.
Klaas
1
Se você precisar fazer o hash do arquivo, use CC_MD5_Init, depois CC_MD5_Update para todos os dados do arquivo e depois disso - CC_MD5_Finish.
Nickolay Olshevsky
7
Compilando para uma arquitetura de 64 bits, a chamada para strlengerar o aviso: "A conversão implícita perde a precisão do número inteiro: 'sem assinatura por muito tempo' para 'CC_LONG' (aka 'int sem assinatura')"
MaxGabriel
55
Você pode usar a biblioteca Common Crypto integrada para fazer isso. Lembre-se de importar:
#import <CommonCrypto/CommonDigest.h>
e depois:
-(NSString*) md5:(NSString*) input
{constchar*cStr =[input UTF8String];unsignedchar digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), digest );// This is the md5 callNSMutableString*output =[NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH *2];for(int i =0; i < CC_MD5_DIGEST_LENGTH; i++)[output appendFormat:@"%02x", digest[i]];return output;}
Implementei o código acima, mas durante a execução do aplicativo que está falhando (CC_MD5 (cStr, strlen (cStr), digerir) ----> esta linha está lançando exceção EXC_BAD_ACCESS dizendo)
Nilesh Kumar
@wimcNilesh verifica selfantes de executar; se o eu for nulo, ele falhará.
brandonscript
4
Esta resposta é muito mais limpa de ler do que as outras; uma coisa que precisa é de um elenco que (int)antes strlen, por exemplo (int)strlen...
brandonscript
Hay Este é um bom voto positivo +1, e você também pode fornecer o método de decodificação md5 igual à sua criptografia.
Ayaz
O @Ayaz MD5 não pode ser descriptografado (pelo menos simplesmente com um método).
Albanx # 15/15
9
Se o desempenho for importante, você pode usar esta versão otimizada. É cerca de 5 vezes mais rápido do que aqueles com stringWithFormatou NSMutableString.
Bem, já que as pessoas pediram uma versão do fluxo de arquivos. Eu modifiquei um pequeno trecho bonito feito por Joel Lopes Da Silva que funciona com MD5, SHA1 e SHA512 E ele está usando fluxos. É feito para iOS, mas funciona com apenas algumas alterações mínimas no OSX (remova o método ALAssetRepresentation). Ele pode criar somas de verificação para arquivos com um caminho de arquivo ou ALAssets (usando ALAssetRepresentation). Ele agrupa dados em pequenos pacotes, tornando o impacto da memória mínimo, independentemente do tamanho do arquivo / tamanho do ativo.
O código que Joel publicou tem uma condição de corrida e parece que o seu pode herdá-lo. Veja o comentário que publiquei no post de Joel. joel.lopes-da-silva.com/2010/09/07/…
xyzzycoder 10/10
Obrigado! Corrigido agora. Este nunca foi um problema para mim desde que na implementação original, eu sempre corri em um segmento dedicado;)
O link cobre Common Crypto, que a maioria das respostas aqui utiliza.
Zaph 13/03/2015
1
Claro que o algo é o mesmo. Mas observe que a implementação de seu próprio algoritmo de criptografia pode apresentar falhas. É preciso muito esforço para corrigi-lo em todos os cenários. Portanto, é preferível usar a versão da biblioteca, no caso comum.
Respostas:
O md5 está disponível no iPhone e pode ser adicionado como complemento para ie
NSString
eNSData
como abaixo.MyAdditions.h
MyAdditions.m
EDITAR
Adicionamos o NSData md5 porque eu mesmo precisava dele e achei que este era um bom lugar para salvar este pequeno trecho ...
Esses métodos são verificados usando os vetores de teste NIST MD5 em http://www.nsrl.nist.gov/testdata/
fonte
strlen
gerar o aviso: "A conversão implícita perde a precisão do número inteiro: 'sem assinatura por muito tempo' para 'CC_LONG' (aka 'int sem assinatura')"Você pode usar a biblioteca Common Crypto integrada para fazer isso. Lembre-se de importar:
e depois:
fonte
self
antes de executar; se o eu for nulo, ele falhará.(int)
antesstrlen
, por exemplo(int)strlen
...Se o desempenho for importante, você pode usar esta versão otimizada. É cerca de 5 vezes mais rápido do que aqueles com
stringWithFormat
ouNSMutableString
.Esta é uma categoria do NSString.
fonte
Bem, já que as pessoas pediram uma versão do fluxo de arquivos. Eu modifiquei um pequeno trecho bonito feito por Joel Lopes Da Silva que funciona com MD5, SHA1 e SHA512 E ele está usando fluxos. É feito para iOS, mas funciona com apenas algumas alterações mínimas no OSX (remova o método ALAssetRepresentation). Ele pode criar somas de verificação para arquivos com um caminho de arquivo ou ALAssets (usando ALAssetRepresentation). Ele agrupa dados em pequenos pacotes, tornando o impacto da memória mínimo, independentemente do tamanho do arquivo / tamanho do ativo.
Atualmente, ele está localizado no github aqui: https://github.com/leetal/FileHash
fonte
Qualquer motivo para não usar a implementação da Apple: https://developer.apple.com/library/mac/documentation/Security/Conceptual/cryptoservices/GeneralPurposeCrypto/GeneralPurposeCrypto.html#//apple_ref/doc/uid/TP40011172-CH9-SW1
Procure o Guia de Serviços Criptográficos no site do desenvolvedor da Apple.
fonte