美文网首页
iOS MD5加密(16位和32位)

iOS MD5加密(16位和32位)

作者: XiaoBaa | 来源:发表于2018-10-14 15:07 被阅读739次

GitHub Demo: https://github.com/BaHui/MD5Hash

简介

MD5加密是最常用的不可逆加密方法之一,是将字符串通过相应特征生成一段32位的数字字母混合码。对输入信息生成唯一的128位散列值(32个16进制的数字)

加密约定

  • 加密结果位数: 加密结果位数是16位还是32位(大多数都是32位的)。
  • 加密结果大小写: MD5加密区分 大小写,使用时要和后台约定好。

声明和实现: (NSString的类别)

// 32位 (较为常用)
- (NSString *)md5HashToLower32Bit;
- (NSString *)md5HashToUpper32Bit;

// 16位
- (NSString *)md5HashToLower16Bit;
- (NSString *)md5HashToUpper16Bit;

#pragma mark - 32位 小写

- (NSString *)md5HashToLower32Bit {
    const char *input = [self UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [digest appendFormat:@"%02x", result[i]];
    }

    return digest;
}

#pragma mark - 32位 大写

- (NSString *)md5HashToUpper32Bit {
    const char *input = [self UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(input, (CC_LONG)strlen(input), result);

    NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [digest appendFormat:@"%02X", result[i]];
    }

    return digest;
}

#pragma mark - 16位 小写

- (NSString *)md5HashToLower16Bit {
    NSString *md5Str = [self md5HashToLower32Bit];

    NSString *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }

    return string;
}

#pragma mark - 16位 大写

- (NSString *)md5HashToUpper16Bit {
    NSString *md5Str = [self md5HashToUpper32Bit];

    NSString *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }

    return string;
}

加盐: 即就是添加"佐料", 如果用户密码数据库不小心被泄露, 黑客就可以通过反查询方式获得用户密码或者对于数据库中出现频率较高的hash码(即很多人使用的)进行暴力破解(因为它通常都是弱口令)
盐值就是在密码hash过程中添加的额外的随机值, 来提高加密算法, 加Salt可以一定程度上解决这一问题。所谓加Salt方法,就是加点“佐料”。其基本想法是这样的:当用户首次提供密码时(通常是注册时),由系统自动往这个密码里撒一些“佐料”,然后再散列。而当用户登录时,系统为用户提供的代码撒上同样的“佐料”,然后散列,再比较散列值,已确定密码是否正确。
这里的“佐料”被称作“Salt值”,这个值是由系统随机生成的,并且只有系统知道。这样,即便两个用户使用了同一个密码,由于系统为它们生成的salt值不同,他们的散列值也是不同的。即便黑客可以通过自己的密码和自己生成的散列值来找具有特定密码的用户,但这个几率太小了(密码和salt值都得和黑客使用的一样才行)。

交流与建议

相关文章

  • iOS 数据加密

    iOS 常用加密方式算法包括MD5加密、AES加密、BASE64加密 MD5加密 MD5:全称是Message D...

  • iOS加密

    iOS代码常见的加密方式包括MD5加密、AES加密、BASE64加密,RSA加密。 MD5加密 MD5是不可逆的只...

  • iOS 加密解密

    iOS各类加密算法详解 iOS & Java md5 加密报错@constant kCCAlignmentEr...

  • iOS代码加密常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS常用加密方式

    iOS代码加密常用加密方式,常见的iOS代码加密常用加密方式算法包括MD5加密、AES加密、BASE64加密,三大...

  • iOS Md5 加密

    iOS Md5 加密: Implicit conversion loses integer precision: ...

  • IOS开发——用户信息使用MD5加密

    MD5说明:MD5是安卓和ios系统中最常用的加密方式,其特点是加密后生成32位的字符串。且加密后的数据不可逆,网...

  • iOS 关于加密

    常见的iOS代码加密常用加密方式包括Base64加密、MD5加密、AES加密、RSA加密等。 Base64加密 B...

  • iOS如何使用MD5加密

    在登录注册时,经常采用MD5加密技术对密码,也用于对敏感数据进行加密。本文简单介绍了iOS中MD5加密的使用方式。...

  • IOS中的加密方式MD5、sha512

    title : IOS中的加密方式MD5、sha512category : IOS .h文件 .m文件

网友评论

      本文标题:iOS MD5加密(16位和32位)

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