जवाबों:
md5 iPhone पर उपलब्ध है और इसे नीचे NSString
और NSData
नीचे की तरह जोड़ दिया जा सकता है ।
MyAdditions.h
@interface NSString (MyAdditions)
- (NSString *)md5;
@end
@interface NSData (MyAdditions)
- (NSString*)md5;
@end
MyAdditions.m
#import "MyAdditions.h"
#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access
@implementation NSString (MyAdditions)
- (NSString *)md5
{
const char *cStr = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, (int)strlen(cStr), result ); // This is the md5 call
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
@implementation NSData (MyAdditions)
- (NSString*)md5
{
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5( self.bytes, (int)self.length, result ); // This is the md5 call
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
NSData md5 को जोड़ा क्योंकि मुझे इसकी आवश्यकता थी और मुझे लगा कि इस छोटे से स्निपेट को बचाने के लिए यह एक अच्छी जगह है ...
इन तरीकों को http://www.nsrl.nist.gov/testdata/ में NIST MD5 परीक्षण वैक्टर का उपयोग करके सत्यापित किया गया है
strlen
चेतावनी देने के लिए कॉल : "निहित रूपांतरण पूर्णांक सटीकता खो देता है: 'अहस्ताक्षरित' लंबे समय तक 'CC_LONG' (उर्फ 'अहस्ताक्षरित int')"
आप ऐसा करने के लिए अंतर्निहित कॉमन क्रिप्टो लाइब्रेरी का उपयोग कर सकते हैं। आयात करना याद रखें:
#import <CommonCrypto/CommonDigest.h>
और फिर:
- (NSString *) md5:(NSString *) input
{
const char *cStr = [input UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
NSMutableString *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;
}
self
निष्पादित करने से पहले जाँच करें ; यदि आत्म शून्य है, तो यह दुर्घटनाग्रस्त हो जाएगा।
(int)
पहले ...strlen
(int)strlen
यदि प्रदर्शन महत्वपूर्ण है, तो आप इस अनुकूलित संस्करण का उपयोग कर सकते हैं। यह लोगों के साथ stringWithFormat
या की तुलना में लगभग 5 गुना तेज है NSMutableString
।
यह NSString की एक श्रेणी है।
- (NSString *)md5
{
const char* cStr = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr, strlen(cStr), result);
static const char HexEncodeChars[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
char *resultData = malloc(CC_MD5_DIGEST_LENGTH * 2 + 1);
for (uint index = 0; index < CC_MD5_DIGEST_LENGTH; index++) {
resultData[index * 2] = HexEncodeChars[(result[index] >> 4)];
resultData[index * 2 + 1] = HexEncodeChars[(result[index] % 0x10)];
}
resultData[CC_MD5_DIGEST_LENGTH * 2] = 0;
NSString *resultString = [NSString stringWithCString:resultData encoding:NSASCIIStringEncoding];
free(resultData);
return resultString;
}
खैर जब से लोगों ने फाइल-स्ट्रीम वर्जन मांगा। मैंने जोएल लोप्स दा सिल्वा द्वारा बनाई गई एक अच्छी छोटी स्निपेट को संशोधित किया है जो MD5, SHA1 और SHA512 के साथ काम करता है और यह धाराओं का उपयोग कर रहा है। इसका iOS के लिए बनाया गया है, लेकिन OSX aswell (ALAssetRepresentation पद्धति को हटा दें) पर केवल न्यूनतम परिवर्तन के साथ काम करता है। यह एक फ़ाइलपथ या ALAssets (ALAssetRepresentation का उपयोग करके) दी गई फ़ाइलों के लिए चेकसम बना सकता है। यह छोटे पैकेजों में डेटा को छोटा कर रहा है, जो फाइल / परिसंपत्ति के आकार की परवाह किए बिना स्मृति प्रभाव को कम करता है।
यह वर्तमान में यहाँ github पर स्थित है: https://github.com/leetal/FileHash
Apple कार्यान्वयन का उपयोग नहीं करने का कोई कारण: https://developer.apple.com/library/mac/documentation/Security/Conceptual/cryptoservices/GeneralPurposeCrypto/GeneralPurposeCrypto.html#//apple_ref/doc/uid/TP40011172-CH9-S1
Apple डेवलपर साइट पर क्रिप्टोग्राफ़िक सर्विसेज गाइड के लिए खोजें।