Điều đáng nói là các phương pháp OpenSSL không được chấp nhận trên các phiên bản OS X mới hơn và thông báo MD5 là trường hợp thường thấp hơn. Cá nhân tôi là một fan hâm mộ của phong cách unrolled cho hiệu quả, và tôi nghĩ rằng bằng cách sử dụng các loại ObjC cho điều này là phù hợp hơn.
Đối với MD5Digest.h: #include
@interface NSString (MD5Digest)
- (NSString*) md5Digest;
@end
@interface NSData (MD5Digest)
- (NSString*) md5Digest;
@end
Và MD5Digest.m:
#include <CommonCrypto/CommonDigest.h>
#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
Nguồn
2011-06-21 18:02:26
nếu có thể, không sử dụng md5 nhưng một sha-băm. MD5 được coi là bị hỏng. –
MD5 không phải là "bị hỏng", có một lỗ hổng cụ thể cho phép bạn tạo xung đột khi bạn đã có khá nhiều thông tin về dữ liệu bị băm. Nó vẫn là một lựa chọn hoàn hảo hợp lệ cho các ứng dụng như xác minh mật khẩu (mặc dù sử dụng muối luôn là một ý tưởng tốt). –
Sử dụng MD5 cho mục đích mã hóa là không khôn ngoan. Dưới đây là cách sao chép mã băm MD5: http://www.mscs.dal.ca/~selinger/md5collision/ Các công cụ này mất vài giờ trên hộp PC-class. Dưới đây là cách giả mạo chứng chỉ kỹ thuật số MD5: http://www.schneier.com/crypto-gram-0901.html Dưới đây là một số chi tiết khác về các cuộc tấn công: http://www.schneier.com/blog/ lưu trữ/2005/06/more_md5_collis.html –