iOS MD5加密算法 和 SHA1加密
来源:互联网 发布:德雷克船长拉杆箱 淘宝 编辑:程序博客网 时间:2024/06/06 03:57
iOS的SDK自带了MD5加密和SHA1加密。
MD5即Message-DigestAlgorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。(引用自百度百科)
注意生成“一定长”,这个“一定长”到底是多长呢!看了好多资料,包括维基百科和一些论坛,说MD5其实进过算法产生的是固定的128bit,即128个0和1的二进制位,而在实际应用开发中,通常是以16进制输出的,所以正好就是32位的16进制,说白了也就是32个16进制的数字。
其中MD5标准的是32位加密的,其他的比如16位、64位以及大小写等都是做的二次处理。下面代码中的result [16]中的16不是表示16位,而是16个字节。其中的CC_MD5_DIGEST_LENGTH也是iOS SDK自带的一个枚举,表示摘要在字节中的长度,为16个字节。
其中%02x是格式控制符:‘x’表示以16进制输出,‘02’表示不足两位,前面补0;如‘f’输出为0f,‘1f3’则输出1f3;本来一般的都会介绍到这里就完了,我想多介绍一下代码中result是个字符数组,那为什么是[16]呢,这是因为MD5算法最后生成的是128位,而在计算机的最小存储单位为字节,1个字节是8位,对应一个char类型,计算可得需要16个char。所以result是[16]。那么为什么输出的格式一定是%02x呢,而不是其它呢。这也是有原因的:因为约定MD5一般是以16进制的格式输出,那么其实这个问题就转换为把128个0和1以16进制来表示,每4位二进制对应一个16进制的元素,则需要32个16进制的元素,如果元素全部为0,放到char的数组中,正常是不会输出,如00001111,以%x输出,则是f,那么就会丢失0;但如果以%02x表示则输出结果是0f,正好是转换的正确结果。
1、MD5 32位加密
这是iOS SDK自带的MD5,所以要导入<CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonDigest.h>
- (NSString *)md5:(NSString *)str
{
const char *cStr = [str UTF8String]; //转换成utf-8
unsigned char result[16];//开辟一个16字节(128位:md5加密出来就是128位/bit)的空间(一个字节=8字位=8个二进制数)
CC_MD5(cStr, strlen(cStr), result); // extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封装好的加密方法把cStr字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了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]
];
/*
x表示十六进制,%02X 意思是不足两位将用0补齐,如果多余两位则不影响
NSLog("%02X", 0x888); //888
NSLog("%02X", 0x4); //04
*/
2、MD5 加密还可以通过for循环的方式简化写法
MD5加密32位简化写法
- (NSString *)MD5
{
constchar *cStr = [selfUTF8String];
unsignedchar digest[CC_MD5_DIGEST_LENGTH];
CC_MD5(cStr,strlen(cStr), digest);
NSMutableString *result = [NSMutableStringstringWithCapacity:CC_MD5_DIGEST_LENGTH *2];
for(int i =0; i <CC_MD5_DIGEST_LENGTH; i++) {
[result appendFormat:@"%02x", digest[i]];
}
return result;
}
3.SHA1加密字符串(SHA1加密也是不可逆的)- (NSString *)SHA1
{
constchar *cStr = [selfUTF8String];
NSData *data = [NSDatadataWithBytes:cStrlength:self.length];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, data.length, digest);
NSMutableString *result = [NSMutableStringstringWithCapacity:CC_SHA1_DIGEST_LENGTH *2];
for(int i =0; i <CC_SHA1_DIGEST_LENGTH; i++) {
[result appendFormat:@"%02x", digest[i]];
}
return result;
}
- iOS MD5加密算法 和 SHA1加密
- SHA1和MD5加密算法对文件加密
- iOS 利用MD5或SHA1加密算法给字符串加密
- iOS开发MD5/SHA1加密算法
- SHA1和MD5加密
- MD5 和 SHA1 加密
- md5加密和sha1加密
- ios swift sha1 md5 加密
- iOS的MD5/SHA1加密算法的实现
- iOS的MD5/SHA1加密算法的实现
- python中的md5和sha1加密算法使用
- HMAC-SHA1加密 和MD5加密
- md5和sha1加密,aes加密
- HMAC-SHA1加密 和MD5加密
- MD5加密和SHA1加密 事列
- SHA1与MD5 加密算法
- MD5 SHA1 BASE64加密算法
- MD5 SHA1 BASE64加密算法
- KNN算法及其实现
- UVA 11582 Colossal Fibonacci Numbers! (大斐波那契数)
- Hibernate的发展和特点以及Hibernate的工作原理简介
- android Log.isLoggable步骤的使用
- java 生成邮件
- iOS MD5加密算法 和 SHA1加密
- 用法总结:NSNumber、NSString、NSData
- hadoop环境配置1-linux系统配置
- 十一、我们应当怎样做需求分析:业务流程分析(下)
- 比较2个字符串的大小strcmp
- js alert confirm添加半透明全屏背景
- C99中变长数组作为函数形参的问题
- MVC 给DropDownList下拉框赋值
- GNU Readline 库及编程简介