উত্তর:
এমডি 5 আইফোনে উপলভ্য এবং এর সংযোজন হিসাবে যুক্ত করা যায় 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
এনএসডাটা এমডি 5 যুক্ত হয়েছে কারণ আমার নিজের এটি প্রয়োজন ছিল এবং এই ছোট্ট স্নিপেটটি সংরক্ষণ করার জন্য এটি একটি ভাল জায়গা ...
এই পদ্ধতিগুলি এনআইএসটি এমডি 5 পরীক্ষা ভেক্টরগুলি http://www.nsrl.nist.gov/testdata/ এ ব্যবহার করে যাচাই করা হয়েছে
strlen
সংকলন করে, এই সতর্কতাটি কল করার জন্য কলটি এসেছে : "অন্তর্নিহিত রূপান্তরটি পূর্ণ নির্ভুলতা হারায়: 'সাইনড লম্বা' থেকে 'সিসি_লং' (ওরফে 'স্বাক্ষরবিহীন
এটি করতে আপনি অন্তর্নির্মিত সাধারণ ক্রিপ্টো লাইব্রেরিটি ব্যবহার করতে পারেন। আমদানি মনে রাখবেন:
#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
যদি পারফরম্যান্স গুরুত্বপূর্ণ হয়, আপনি এই অনুকূলিত সংস্করণটি ব্যবহার করতে পারেন। এটি যাগুলির সাথে প্রায় 5 গুণ বেশি দ্রুতstringWithFormat
বাNSMutableString
।
এটি এনএসএসস্ট্রিংয়ের একটি বিভাগ।
- (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 এর সাথে কাজ করে এবং এটি স্ট্রিম ব্যবহার করছে। এটি আইওএসের জন্য তৈরি তবে ওএসএক্স-এ কেবলমাত্র ন্যূনতম পরিবর্তনগুলির সাথে কাজ করে (এএলএসেটরপ্রেসিভেশন পদ্ধতিটি সরান)। এটি ফাইলপথ বা এএলসেটস (ALAssetRepiversityation ব্যবহার করে) দেওয়া ফাইলগুলির জন্য চেকসাম তৈরি করতে পারে। এটি ফাইলের আকার / সম্পত্তির আকার নির্বিশেষে মেমরির প্রভাবকে সর্বনিম্ন ন্যূনতম প্যাকেজগুলির মধ্যে ডেটা ছড়িয়ে দিচ্ছে।
এটি বর্তমানে এখানে গিথুবে রয়েছে: https://github.com/leetal/FileHash
অ্যাপল বাস্তবায়ন ব্যবহার না করার কোনও কারণ: https://developer.apple.com/library/mac/docamentation/Security/Concepual/cryptoservices/ GenderralPurposeCrypto.html# TP40011172-
অ্যাপল বিকাশকারী সাইটে ক্রিপ্টোগ্রাফিক পরিষেবাদি গাইড অনুসন্ধান করুন।