md5 的16位32位加密

一、單一 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

感謝之前上傳的朋友






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章