iOS開發日記8-MD5加密,ios日記8-md5
今天博主有一個密碼加密的需求,遇到了一些困痛點,在此和大家分享,希望能夠共同進步.
MD5加密和SHA-1加密是電腦世界非常重要的兩種密碼編譯演算法.MD5加密通常用於對NSString的加密,而SHA-1加密通常用於對URL的加密,今天和大家重點分享一下MD5加密的方法.
使用MD5加密,我們需要給NSString增加一個類別,並匯入<CommonCrypto/CommonDigest.h>標頭檔.
.h中的內容:
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
@interface NSString (MD5encrypt)
-(NSString *) md5HexDigest;
@end
.m中的內容:
#import "NSString+MD5encrypt.h"
@implementation NSString (MD5encrypt)
-(NSString *) md5HexDigest
{
const char *original_str = [self UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
// CC_MD5(original_str, strlen(original_str), result); 這裡的用法明顯是錯誤的,當original_str中包含Null 字元(\0)時
CC_MD5(original_str, (unsigned int)self.length, result);
NSMutableString *hash = [NSMutableString string];
for (int i = 0; i < 16; i++)
[hash appendFormat:@"%02X", result[i]];
return [hash lowercaseString];
}
@end
現在的MD5已不再是絕對安全,對此,可以對MD5稍作改進,以增加解密的難度:
1.加鹽(Salt):在明文的固定位置插入隨機串,然後再進行MD5
2.先加密,後亂序:先對明文進行MD5,然後對加密得到的MD5串的字元進行亂序
總之宗旨就是:駭客就算攻破了資料庫,也無法解密出正確的明文.
/** * 直接用MD5加密 */- (NSString *)digest:(NSString *)str { NSString *anwen = [str md5String];
NSLog(@"%@ - %@", str, anwen); return anwen; } /** * 加鹽 */- (NSString *)digest2:(NSString *)str { str = [str stringByAppendingString:Salt]; NSString *anwen = [str md5String]; NSLog(@"%@ - %@", str, anwen); return anwen; } /** * 多次MD5 */- (NSString *)digest3:(NSString *)str{ NSString *anwen = [str md5String]; anwen = [anwen md5String]; NSLog(@"%@ - %@", str, anwen); return anwen; }
/** * 先加密, 後亂序,推薦使用 */- (NSString *)digest4:(NSString *)str { NSString *anwen = [str md5String]; NSString *header = [anwen substringToIndex:2]; NSString *footer = [anwen substringFromIndex:2]; anwen = [footer stringByAppendingString:header]; NSLog(@"%@ - %@", str, anwen); return anwen; }