美文网首页
加密算法

加密算法

作者: howhyone | 来源:发表于2019-04-16 21:00 被阅读0次

    1MD5

    MD5:全称Message-Digest Algorithm 5,是一种不可逆的摘要算法,没有公钥私钥一说,通常用于验证,MD5的算法是一致的,输入两个字符串比较最后得出的16位的16进制字符串。MD5加密可以在线被破解:解密地址,可以通过加盐来增加数据的安全性

    2 用法

    1、 当字符串有"\0"空格的转义字符字符串的方法有问题,相当于是\0之前的字符串

    +(NSString *)MD5:(NSString *)str
    {
        NSMutableString *md5Str = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
        const char *md5Char = [str UTF8String];
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(md5Char, (CC_LONG)strlen(md5Char), result);
        
        for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
           [md5Str appendFormat:@"%02x",result[i]];
        }
    
        return md5Str;
    }
    

    2、 32字节的小写MD5加密

    + (NSString *)MD5Data:(NSData *)data
    {
        NSMutableString *md5Str = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
        const char *md5Char = [data bytes];
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(md5Char, (CC_LONG)data.length, result);
        
        for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            [md5Str appendFormat:@"%02x",result[i]];
        }
        
        return md5Str;
    }
    

    3、 32字节的大写MD5加密

    + (NSString *)MD5DataUpper:(NSData *)data
    {
        NSMutableString *md5Str = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
        const char *md5Char = [data bytes];
        unsigned char result[CC_MD5_DIGEST_LENGTH];
        CC_MD5(md5Char, (CC_LONG)data.length, result);
        
        for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
            [md5Str appendFormat:@"%02X",result[i]];
        }
        
        return md5Str;
    }
    

    4、16字节的小写MD5加密

    + (NSString *)MD5ForLower16Byte:(NSData *)data
    {
        NSString *md5Str;
       NSString *byteStr32 = [self MD5Data:data];
        for (int i = 0; i < 24; i++) {
            md5Str = [byteStr32 substringWithRange:NSMakeRange(8, 16)];
        }
        return md5Str;
    }
    

    5、16字节的大写MD5加密

    + (NSString *)MD5ForUpper16Byte:(NSData *)data
    {
        NSString *md5Str;
        NSString *byteStr32 = [self MD5DataUpper:data];
        for (int i = 0; i < 24; i++) {
            md5Str = [byteStr32 substringWithRange:NSMakeRange(8, 16)];
        }
        
        return md5Str;
    }
    

    3加盐

    MD5加密后的字符串是不可逆的,不能解密,理论上是安全的,但是网上有彩虹表(存储大量弱密码和弱密码MD5加密后的字符串)用于碰撞适配我们MD5加密后的字符串,如果找到相同的MD5字符串就可以逆向得知我们的密码,所以将我们的密码 拼接 更加复杂的字符串,在彩虹表中难以找到相同的MD5字符串,这个过程就是加盐。

    SHA1的加密流程和MD5类似,可以参考下SHA1加密

    demo地址:GitHub地址

    参考资料:https://www.jianshu.com/p/89154c0c213c
    https://www.jianshu.com/p/02a2946d4e97
    https://www.jianshu.com/p/70ee2212f7f1

    相关文章

      网友评论

          本文标题:加密算法

          本文链接:https://www.haomeiwen.com/subject/jlxiwqtx.html