zoukankan      html  css  js  c++  java
  • iOS使用MD5

    iOS 字符串加密至MD5

    复制代码
     1 #import <CommonCrypto/CommonDigest.h>
    2
    3 + (NSString *) md5:(NSString *)str
    4 {
    5 const char *cStr = [str UTF8String];
    6 unsigned char result[16];
    7 CC_MD5( cStr, strlen(cStr), result );
    8 return [NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
    9 result[0], result[1], result[2], result[3],
    10 result[4], result[5], result[6], result[7],
    11 result[8], result[9], result[10], result[11],
    12 result[12], result[13], result[14], result[15]
    13 ];
    14 }
    复制代码

      

    iPhone处理大文件检测MD5的代码

    复制代码
     1 +(NSString*)fileMD5:(NSString*)path
    2 {
    3 NSFileHandle *handle = [NSFileHandle fileHandleForReadingAtPath:path];
    4 if( handle== nil ) return @"ERROR GETTING FILE MD5"; // file didnt exist
    5
    6 CC_MD5_CTX md5;
    7
    8 CC_MD5_Init(&md5);
    9
    10 BOOL done = NO;
    11 while(!done)
    12 {
    13 NSData* fileData = [handle readDataOfLength: CHUNK_SIZE ];
    14 CC_MD5_Update(&md5, [fileData bytes], [fileData length]);
    15 if( [fileData length] == 0 ) done = YES;
    16 }
    17 unsigned char digest[CC_MD5_DIGEST_LENGTH];
    18 CC_MD5_Final(digest, &md5);
    19 NSString* s = [NSString stringWithFormat: @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
    20 digest[0], digest[1],
    21 digest[2], digest[3],
    22 digest[4], digest[5],
    23 digest[6], digest[7],
    24 digest[8], digest[9],
    25 digest[10], digest[11],
    26 digest[12], digest[13],
    27 digest[14], digest[15]];
    28 return s;
    29 }

    In my project i need to get the MD_5 hash code of the file in iphone. uptill now i have found the following code to get md_5 of any image/any file.

    -(NSString*)getMD5FromString:(NSString*)source{constchar*src =[source UTF8String];unsignedchar result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(src, strlen(src), 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]]lowercaseString];}

    using this code to get the ByteContent of the image and then get the md_5 of that image byte array string

    UIImage*image =[UIImage imageNamed:@"sf_small.png"];NSData*data =UIImagePNGRepresentation(image);NSString*str =[NSString stringWithFormat:@"%@",data];NSString*temp =[self getMD5FromString:str];

    now i am getting a hash code succesfully But when on the web side i get the md_5 hash code of same file then it gives me diferent hash code. in Web side i am using PHP code

     md5_file(string $filename);

    this PHP code gives me differnet hash code and iphone code gives me different hash code for same image. Please tell me what can be the problem..

    Thanks alot!

       
    
    

    There are 2 causes. The first is because the raw bytes → string → UTF-8 process corrupted some non-ASCII characters. Note that you can get a pointer to the bytes from an NSData directly:

    UIImage* image =[UIImage imageNamed:@"sf_small.png"];NSData* data =UIImagePNGRepresentation(image);constvoid* src =[data bytes];NSUInteger len =[data length];
    CC_MD5(src, len, result);...

    The second cause is because of the PNG → raw image → PNG process. There is no guarentee that the same image will compress to the same PNG representation in different libraries, and of course you'll have different MD5. You could just avoid reading the file as image altogether, as it's possible read the file directly as data:

    NSData* data =[NSData dataWithContentsOfFile:@"sf_small.png"];

    const void* src =[data bytes];

    NSUInteger len =[data length]; CC_MD5(src, len, result);
  • 相关阅读:
    CodeDOM浅析(上)
    这段代码居然运行正常
    CodeDOM浅析(下)
    动态生成与编译(七)根据CodeDOM生成源代码
    动态生成与编译(九)CodeDOM的局限
    动态生成与编译(八)动态编译
    新年送大礼
    祝所有的女性朋友们节日快乐!
    预测人民币在2006年最终的收盘价
    2007年春节,祝朋友们:身体健康,万事如意! 度过一个愉快春节!
  • 原文地址:https://www.cnblogs.com/lisa090818/p/3183531.html
Copyright © 2011-2022 走看看