阅读339 返回首页    go 阿里云 go 技术社区[云栖]


NSString加密相关扩展

//
//  NSString+Encrypt.h
//  CloudShopping
//
//  Created by sixiaobo on 14-7-9.
//  Copyright (c) 2014年 com.Uni2uni. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCrypto.h>
#import <sys/sysctl.h>
#import <sys/socket.h>
#import <net/if.h>
#import <net/if_dl.h>

/*!
 * @brief NSString扩展加密相关方法
 * @author huangyibiao
 */
@interface NSString (Encrypt)

/*!
 * @brief 将字符串本身进行md5加密,并将加密后的字符串返回
 * @return 返回加密后的字符串
 */
- (NSString *)md5;

//! sha1加密
- (NSString *)sha1;

//! 获取网卡的MAC地址
+ (NSString *)obtainMacAddress;

@end


//
//  NSString+Encrypt.m
//  CloudShopping
//
//  Created by sixiaobo on 14-7-9.
//  Copyright (c) 2014年 com.Uni2uni. All rights reserved.
//

#import "NSString+Encrypt.h"
#import "NSString+Hashing.h"

@implementation NSString (Encrypt)

#pragma mark - md5加密
- (NSString *)md5 {
    return self.MD5Hash;
}

#pragma mark - sha1加密方法
- (NSString *)sha1 {
    const char *cstr = [self cStringUsingEncoding:NSUTF8StringEncoding];
    NSData *data = [NSData dataWithBytes:cstr length:self.length];
    
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, data.length, digest);
    NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    
    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x", digest[i]];
    }
    return output;
}

#pragma mark - 获取MAC地址
+ (NSString *)obtainMacAddress {
    int                    mib[6];
    size_t                 len;
    char                   *buf;
    unsigned char          *ptr;
    struct if_msghdr       *ifm;
    struct sockaddr_dl     *sdl;
    
    mib[0] = CTL_NET;
    mib[1] = AF_ROUTE;
    mib[2] = 0;
    mib[3] = AF_LINK;
    mib[4] = NET_RT_IFLIST;
    
    if ((mib[5] = if_nametoindex("en0")) == 0) {
        printf("Error: if_nametoindex error\n");
        return NULL;
    }
    
    if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
        printf("Error: sysctl, take 1\n");
        return NULL;
    }
    
    if ((buf = malloc(len)) == NULL) {
        printf("Could not allocate memory. error!\n");
        return NULL;
    }
    
    if (sysctl(mib, 6, buf, &len, NULL, 0) > 0) {
        free(buf);
        printf("Error: sysctl, take 2");
        return NULL;
    }
    
    ifm = (struct if_msghdr *)buf;
    sdl = (struct sockaddr_dl *)(ifm + 1);
    ptr = (unsigned char *)LLADDR(sdl);
    NSString *outstring = [NSString stringWithFormat:@"%02x%02x%02x%02x%02x%02x",
                           *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];
    free(buf);
    
    return [outstring uppercaseString];
}

@end


最后更新:2017-04-03 05:39:42

  上一篇:go AJAX入门---DOM操作HTML
  下一篇:go 定制scrollView来处理自动显示与隐藏键盘