一、單一 md5加密(創建繼承NSObject)
//md5.h文件
#import <Foundation/Foundation.h>
@interface MyMD5 : NSObject {
}
/*****
MD5 加密
*****/
+(NSString *) md5: (NSString *) inPutText ;
@end
//md5.m文件
#import "MyMD5.h"
//添加#import <CommonCrypto/CommonDigest.h> 庫
#import "CommonCrypto/CommonDigest.h"
@implementation MyMD5
+(NSString *) md5: (NSString *) inPutText
{
const char *cStr = [inPutText UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr, strlen(cStr), 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];
}
@end
二、雙層 16、32位 多層 md5加密 (不需要第三方庫)
實例 vc.h文件
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *srcStringTextField;
@property (weak, nonatomic) IBOutlet UILabel *entryptTypeLabel;
@property (weak, nonatomic) IBOutlet UILabel *introLabel1;
@property (weak, nonatomic) IBOutlet UILabel *resultLabel1;
@property (weak, nonatomic) IBOutlet UILabel *introLabel2;
@property (weak, nonatomic) IBOutlet UILabel *resultLabel2;
@property (weak, nonatomic) IBOutlet UILabel *introLabel3;
@property (weak, nonatomic) IBOutlet UILabel *resultLabel3;
@property (weak, nonatomic) IBOutlet UILabel *introLabel4;
@property (weak, nonatomic) IBOutlet UILabel *resultLabel4;
- (IBAction)bgTap:(id)sender;
//md5常規加密 按鈕
- (IBAction)commonMd5BtnPressed:(id)sender;
//md5二次加密按鈕
- (IBAction)secondaryMd5BtnPressed:(id)sender;
//sha加密按鈕
- (IBAction)shaBtnPressed:(id)sender;
//ASE加密
@end
實例 vc.m文件
#import "ViewController.h"
#import <CommonCrypto/CommonDigest.h>
@interface ViewController ()
{
NSString *resultString;
}
- (NSString *)getMd5_32Bit_String:(NSString *)srcString;
- (NSString *)getMd5_16Bit_String:(NSString *)srcString;
@end
@implementation ViewController
@synthesize entryptTypeLabel;
@synthesize introLabel1;
@synthesize introLabel2;
@synthesize introLabel3;
@synthesize introLabel4;
@synthesize resultLabel1;
@synthesize resultLabel2;
@synthesize resultLabel3;
@synthesize resultLabel4;
@synthesize srcStringTextField;
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (IBAction)commonMd5BtnPressed:(id)sender {
[entryptTypeLabel setText:@"常規md5加密"];
[introLabel1 setText:@"32位小寫"];
[resultLabel1 setText:[self getMd5_32Bit_String:srcStringTextField.text]];
//只需將得到的加密字串轉化成大寫即可
[introLabel2 setText:@"32位大寫"];
[resultLabel2 setText:[[self getMd5_32Bit_String:srcStringTextField.text] uppercaseString]];
[introLabel3 setText:@"16位小寫"];
[resultLabel3 setText:[self getMd5_16Bit_String:srcStringTextField.text]];
[introLabel4 setText:@"16位大寫"];
[resultLabel4 setText:[[self getMd5_16Bit_String:srcStringTextField.text] uppercaseString]];
}
- (IBAction)secondaryMd5BtnPressed:(id)sender {
//實際上就是做兩次常規轉化
[entryptTypeLabel setText:@"二次md5加密"];
[introLabel1 setText:@"32位小寫"];
[resultLabel1 setText:[self getMd5_32Bit_String:[self getMd5_32Bit_String:srcStringTextField.text]]];
//只需將得到的加密字串轉化成大寫即可
[introLabel2 setText:@"32位大寫"];
[resultLabel2 setText:[[self getMd5_32Bit_String:[[self getMd5_32Bit_String:srcStringTextField.text] uppercaseString]]uppercaseString]];
[introLabel3 setText:@"16位小寫"];
[resultLabel3 setText:[self getMd5_16Bit_String:[self getMd5_16Bit_String:srcStringTextField.text]]];
[introLabel4 setText:@"16位大寫"];
[resultLabel4 setText:[[self getMd5_16Bit_String:[[self getMd5_16Bit_String:srcStringTextField.text] uppercaseString]] uppercaseString]];
}
//sha加密
- (IBAction)shaBtnPressed:(id)sender{
[entryptTypeLabel setText:@"sha安全哈希加密"];
[introLabel1 setText:@"sha1加密"];
[resultLabel1 setText:[self getSha1String:srcStringTextField.text]];
[introLabel2 setText:@"sha256加密"];
[resultLabel2 setText:[self getSha256String:srcStringTextField.text]];
[introLabel3 setText:@"sha384加密"];
[resultLabel3 setText:[self getSha384String:srcStringTextField.text]];
[introLabel4 setText:@"sha512加密"];
[resultLabel4 setText:[self getSha512String:srcStringTextField.text]];
}
- (IBAction)bgTap:(id)sender {
[self.srcStringTextField resignFirstResponder];
}
//16位MD5加密方式
- (NSString *)getMd5_16Bit_String:(NSString *)srcString{
//提取32位MD5散列的中間16位
NSString *md5_32Bit_String=[self getMd5_32Bit_String:srcString];
NSString *result = [[md5_32Bit_String substringToIndex:24] substringFromIndex:8];//即9~25位
return result;
}
//32位MD5加密方式
- (NSString *)getMd5_32Bit_String:(NSString *)srcString{
const char *cStr = [srcString UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), digest );
NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[result appendFormat:@"%02x", digest[i]];
return result;
}
//sha1加密方式
- (NSString *)getSha1String:(NSString *)srcString{
const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:srcString.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
[result appendFormat:@"%02x", digest[i]];
}
return result;
}
//sha256加密方式
- (NSString *)getSha256String:(NSString *)srcString {
const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:srcString.length];
uint8_t digest[CC_SHA256_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
[result appendFormat:@"%02x", digest[i]];
}
return result;
}
//sha384加密方式
- (NSString *)getSha384String:(NSString *)srcString {
const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:srcString.length];
uint8_t digest[CC_SHA384_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA384_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA384_DIGEST_LENGTH; i++) {
[result appendFormat:@"%02x", digest[i]];
}
return result;
}
//sha512加密方式
- (NSString*) getSha512String:(NSString*)srcString {
const char *cstr = [srcString cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data = [NSData dataWithBytes:cstr length:srcString.length];
uint8_t digest[CC_SHA512_DIGEST_LENGTH];
CC_SHA512(data.bytes, data.length, digest);
NSMutableString* result = [NSMutableString stringWithCapacity:CC_SHA512_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA512_DIGEST_LENGTH; i++)
[result appendFormat:@"%02x", digest[i]];
return result;
}
@end
感謝之前上傳的朋友