MD5加密和SHA1加密
软件开发开发过程中,对数据的处理很重要。而对于数据的安全,数据的加密尤为重要。
简述:
MD5即Message Digest Algorithm 5(信息-摘要算法 5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一。
SHA即Secure Hash Algorithm(安全散列算法) 是美国国家安全局 (NSA) 设计,美国国家标准与技术研究院 (NIST) 发布的一系列密码散列函数。
在进行加密之前,需要导入头文件#import <CommonCrypto/CommonDigest.h>
这是一个系统的C/C++共享库
导入库之后,就可以编程了
- (NSString *)md5:(NSString *)str{
// 转化成utf-8
const char *cStr=[str UTF8String];
// 开辟一个16字节(128位:MD5加密出来就是128位/bit(字节),1字节=8位)的空间
unsigned char result[16];
// 加密存储到result中,将cStr字符串转换成了32位,一般来说,此过程不可逆,即只能加密,不能解密
CC_MD5(cStr, strlen(cStr), result);
// 其中%02x是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0
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]];
// md5加密另一种写法:利用for循环输出
- (NSString *)md5:(NSString *)str{
// 转化成utf-8
const char *cStr=[str UTF8String];
// 开辟一个16字节(128位:MD5加密出来就是128位/bit(字节),1字节=8位)的空间
unsigned char result[16];
// 加密存储到result中,将cStr字符串转换成了32位
CC_MD5(cStr, strlen(cStr), result);
// 其中%02x是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0
NSMutableString *mStr=[NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i=0; i<CC_MD5_DIGEST_LENGTH; i++) {
[mStr appendFormat:@"%02X",result[i]];
}
return mStr;
// sha1加密
- (NSString *)sha1:(NSString *)str{
const char *cStr=[str cStringUsingEncoding:NSUTF8StringEncoding];
NSData *data=[NSData dataWithBytes:cStr length:str.length];
uint8_t disgest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, disgest);
NSMutableString *output=[NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH*2];
for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) {
[output appendFormat:@"%02x",disgest[i]];
}
return output;
}
然后直接调用方法就可以了
viewDidLoad方法中,
- (void)viewDidLoad {
[super viewDidLoad];
// 假设对1进行加密,内容可自选
NSString *string=@"1";
// md5加密
NSString *str = [self md5:string];
// 打印
NSLog(@"str=%@",str);
// sha1加密
NSString *str1=[self sha1:string];
// 打印
NSLog(@"str1=%@",str1);
}
打印结果如下: