密码学初见

2018-12-10  本文已影响0人  TAsama

最早的密码学:

密码本加密

持续到了上世纪的70年代

RSA加密

只能通过因式分解的方式来破解,破解难度巨大
rsa加密之后衍生出了很多加密算法,如:

散列函数:

特点:
用途:
破解:

MD5的实现

- (NSString *)md5String {
    const char *str = self.UTF8String;
    unsigned char buffer[CC_MD5_DIGEST_LENGTH];
    
    CC_MD5(str, (CC_LONG)strlen(str), buffer);
    NSMutableString * ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        /**
        X 表示以十六进制形式输入/输出
        02 表示不足两位,前面补0输出;出过两位不影响
        printf("%02X", 0x123); 打印出:123
        printf("%02X", 0x1); 打印出:01
        */
        [ret appendFormat:@"%02X",buffer[i]];
    }
    return ret;
}

由于使用MD5已经不是很安全了,为了保证MD5的基本安全:

  1. 加盐(但是“盐”是固定的,如果“盐”泄露了就不安全了,而“盐”无法更改)
  2. HMAC,目前一两年在国内开始增多
    给定一个秘钥,对明文进行加密,并且做了“两次散列”
    服务器将保存用户的账号以及账号对应的秘钥
- (NSString *)hmac_md5String:(NSString *)key {
    return [self.md5String stringByAppendingString:key].md5String;
}
hmac 登录思路:
  1. 用户登录
  2. 本地查找秘钥,若找不到,则像服务器发送账号,获取秘钥
设备锁思路:

当新设备登录时,在本地查找不到对应账号的秘钥,就会想服务器发送秘钥请求,此时服务器就向原先的设备发解锁请求,如果请求通过了,则向新设备发送秘钥,新设备保存至本地。

hmac+时间

客户端: (pwd.hmac+当前时间).md5
服务端:(加密后的密码+当前时间).md5 || (加密后的密码+当前时间前一分钟).md5

本地保存
  1. 记住密码,加密保存,反向解密。
    钥匙串访问:
    钥匙串加密使用AES加密,可以将保存的密码以明文的方式反算给你
    pod 'SAMKeychain'
    需要先开启钥匙串访问
上一篇下一篇

猜你喜欢

热点阅读