加密(MD5加密和HAMC加密)
来源:互联网 发布:linux内核的系统 编辑:程序博客网 时间:2024/05/20 07:20
MD5加密
一:首先自己创建一个分类
二:在.h文件里写一个加密方法的声名
- (NSString *)stringToMD5:(NSString *)str;
1.先将加密的库导进来
#import <CommonCrypto/CommonCrypto.h>
2.对加密方法进行实现
- (NSString *)stringToMD5:(NSString *)str
{
constchar *fooData = [strUTF8String];
//2.然后创建一个字符串数组,接收MD5的值
unsignedchar result[CC_MD5_DIGEST_LENGTH];
//3.计算MD5的值,这是官方封装好的加密方法:把我们输入的字符串转换成16进制的32位数,然后存储到result中
CC_MD5(fooData, (CC_LONG)strlen(fooData), result);
/**
第一个参数:要加密的字符串
第二个参数:获取要加密字符串的长度
第三个参数:接收结果的数组
*/
//4.创建一个字符串保存加密结果
NSMutableString *saveResult = [NSMutableStringstring];
//5.从result数组中获取加密结果并放到 saveResult中
for (int i =0; i <CC_MD5_DIGEST_LENGTH; i++) {
[saveResult appendFormat:@"%02x", result[i]];
}
/*
x表示十六进制,%02X 意思是不足两位将用0补齐,如果多余两位则不影响
NSLog("%02X", 0x888); //888
NSLog("%02X", 0x4); //04
*/
return saveResult;
}
四:控制器里调用
六:这样子直接MD5加密会被破解出来
因为MD加密后的值是一个32位的唯一值,比如说123456加密后的值是auysvdajbdajbd1231,这是是唯一的,不管加密多少次,结果都是auysvdajbdajbd1231
解决方法:
使用MD5加盐方法,即定义一个静态的字符串static值,在MD5加密之前先将static值拼接在密码后面再进行加密,这样就安全系数提高
HAMC加密
和MD5一样是创建一个分类,在.h里面声名,.m里面实现
#pragma mark - HMAC 散列函数
- (NSString *)hmacMD5StringWithKey:(NSString *)key {
constchar *keyData = key.UTF8String;
constchar *strData =self.UTF8String;
uint8_t buffer[CC_MD5_DIGEST_LENGTH];
CCHmac(kCCHmacAlgMD5, keyData, strlen(keyData), strData, strlen(strData), buffer);
return [self stringFromBytes:buffer length:CC_MD5_DIGEST_LENGTH];
}
HAMC加密思路:
1、注册账号时向服务器申请一个随机生成唯一的key值,将key值保存的手机本地(利用钥匙串)和服务器
2、利用key值对密码进行加密,并将加密后的密码保存在服务器
3、登录的时候再一次利用保存在本地的key值进行HAMC加密,与服务器进行对比
提示:如果换了手机或是换了账号,就向服务器请求key值下来
MD5+HAMC加密(三种里最安全的做法)
1、利用hamc加密注册账号密码:(pwd+key).hamc = PWD
- 加密(MD5加密和HAMC加密)
- md5加密和sha1加密
- MD5加密和简单加密
- MD5 加密 和Base64加密
- MD5加密和RSA加密
- MD5加密(密码加密)
- SHA1和MD5加密
- MD5 和 SHA1 加密
- RSA和MD5加密
- RSA和MD5加密
- Base64和MD5加密
- MD5和SHA加密
- md5 校验和加密
- MD5和SHA加密
- MD5加密和加盐
- MD5加密和编码
- Base64 和 MD5 加密
- MD5加密和解密
- ubuntu 16.04 google chrome的Adobe插件更新
- javascript canvas 绘图 2d 渐变 阴影
- Android实现RecyclerView侧滑删除和长按拖拽
- VLfeat win10 vs2015 编译
- 基础碰撞检测01
- 加密(MD5加密和HAMC加密)
- MFC实现多界面切换
- STM32 GPIO管脚模式的设置及使用方法
- 利用uboot启动远程Kernel(TFTP)以及挂载远程ROOTFS(NFS)
- 安卓 集成环信EaseUI导致V4jar包冲突
- Dialog对话框
- Maven简介
- CentOS6.2操作的一些内容积累
- 写入mysql数据库