加密算法

2019-04-16  本文已影响0人  howhyone

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

上一篇下一篇

猜你喜欢

热点阅读