iOS MD5 SHA1 加密

Posted by Nick Deng on 2017-04-16

MD5 加密实现方法

MD5 的时间方法可以直接使用 <CommonCrypto/CommonCrypto.h> 这个 C 语言的库来进行实现。我们可以实现一个 NSString 的分类类扩展 NSString 的方法,上下具体代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-(NSString*)stringToMD5:(NSString *)str{
// 将接受的参数转为UTF-8格式
const char *cstr = [str UTF8String];
// 设定接受的结果数组长度
unsigned char result[CC_MD5_DIGEST_LENGTH];
// 将字符串转换成了32位的16进制数列
CC_MD5(cstr, (CC_LONG)strlen(cstr), result);
// 创建一个可变字符串
NSMutableString *saveResult = [NSMutableString string];
// 组装对应的字符串,%02x就是输出两位16进制数据,不足2为补0
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[saveResult appendFormat:@"%02x",result[i]];
}

return saveResult;
}

SHA1 加密实现方式

SHA1 的实现方式跟 MD5 类似,也是可以直接使用<CommonCrypto/CommonCrypto.h>这个库,具体看下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-(NSString*)stringToSHA1:(NSString *)str{
// 转化位cstring 或者类似MD5的方式也行 const char *cstr = [str UTF8String];
const char *cstr = [str cStringUsingEncoding:NSUTF8StringEncoding];
// 生成对应的NSData对象
NSData *data = [NSData dataWithBytes:cstr length:self.length];
// 创建一个20个位的1字节数组
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
// 转化为对应的16进制数字
CC_SHA1(data.bytes, data.length, digest);
// 声明一个40字符的string对象
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;
}

知识点

  • 1 字节 uint8_t
  • 2 字节 uint16_t
  • 4 字节 uint32_t
  • 8 字节 uint64_t