【Objective-C】哈希算法(MD5)工具类
来源:互联网 发布:只差一个程序员了 编辑:程序博客网 时间:2024/06/07 10:55
1、MD5算法是对任意一个二进制数据进行加密,可以得到定长的字符串结果。是一种单向加密。
2、MD5是散列(哈希)算法的一种,加密结果是32个字符。SHA1加密结果是40个字符。Git版本穿越用的就是SHA1。
3、对原文进行两次MD5的处理不安全,很容易就可以破解。(只要有足够多条的数据,就可以有很大可能被匹配出来,如www.cmd5.com)
4、对数据进行加盐,两年前用的比较多,现在用的少一些。这样可以保证MD5的安全。注意:“盐”是佐料,要够咸。
5、HMAC加密:[self.pwd hmacMD5StringWithKey:@“itheima”]
先使用密钥itheima对密码加密,再做md5。接着再次使用itheima加密,再次md5。现在使用比较广泛,安全级别更高,无法穷举法破解。
风险是:如果每次结果一致,有可能被暴力破解。
6、安全的密码要求是:同样的算法,同样的密码明文,每次的加密结果不一样。
可以使用时间戳密码,目前使用非常广泛:”zhang 2015-08-08 14:14”。
流程:
1、先对key进行一次MD5,把key值弄得足够复杂。
2、用MD5后的key对密码进行hmac
3、取得当前的系统时间,并且指定时区。真机通常需要指定时区
4、用密码加格式化后的时间
5、得出结果后再次hmac并返回
7、服务器验证时间戳密码
用户注册的时候是用密码.hmac,存储到数据库中。
登录的时候根据上面的完整算法,把加密后的密码发送到服务器。服务器端从数据库中根据用户名拿到密码,跟客户端用同样的算法再加密一遍。注意:终端用的时间要从服务器端获取,确保用的和服务器端是用的同一个时间。时间精确到分,服务器端验证时要减1,这样密码的有效期不到两分钟。
潜在风险:用户第一次注册密码时被拦截,虽然被拦截的几率小。
辅助手段:ip绑定!电话绑定。。。
#import<Foundation/Foundation.h>@interfaceNSString (Hash)- (NSString*)md5String;- (NSString*)hmacMD5StringWithKey:(NSString*)key;@end#import"NSString+Hash.h"#import <CommonCrypto/CommonCrypto.h>@implementationNSString (Hash)- (NSString*)md5String { const char *str =self.UTF8String; uint8_t buffer[CC_MD5_DIGEST_LENGTH]; CC_MD5(str, (CC_LONG)strlen(str), buffer); return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];}- (NSString*)hmacMD5StringWithKey:(NSString*)key { const char *keyData = key.UTF8String; const char *strData =self.UTF8String; uint8_t buffer[CC_MD5_DIGEST_LENGTH]; CCHmac(kCCHmacAlgMD5, keyData, strlen(keyData), strData,strlen(strData), buffer); return [selfstringFromBytes:bufferlength:CC_MD5_DIGEST_LENGTH];}@end
阅读全文
0 0
- 【Objective-C】哈希算法(MD5)工具类
- MD5算法工具类
- IOS(objective-c)实现md5加密(32位小写)的工具类
- java MD5算法工具类
- MD5 加密 Objective C
- objective-c MD5 Implementation
- MD5 算法实现(c++)
- Objective-C MD5加密字符串
- Objective-C MD5加密字符串
- Objective-C MD5加密字符串
- Objective-C MD5加密字符串
- objective-c加密算法之MD5
- Objective-C MD5加密方法
- 哈希算法 MD5
- 分享:用四十种语言分别写一个MD5算法 之23 Objective-C语言MD5算法
- MD5--Utils(工具类)
- C#MD5算法
- C#MD5算法
- 面向对象——匿名内部类
- 编写字符串反转函数strrev
- SpringIOC容器的生命周期
- Navicat导出sql结构脚本并导入powerdesion(带描述Comment)
- spring mvc入门
- 【Objective-C】哈希算法(MD5)工具类
- 【剑指Offer】面试题37:两个链表的第一个公共结点
- 第二章 头文件、变量和基本类型(4)——转义序列
- OverFeat
- 一些前端开发中最常用的JS代码片段
- 10.2.0.4 DG 数据文件同步问题处理
- 题目1178:复数集合
- Android 百分比屏幕适配方案
- Centos7 dumpe2fs: 没有那个文件或目录