美文网首页iOS学习iOS 开发ios出包各项
iOS开发 关于MD5加密的相关使用

iOS开发 关于MD5加密的相关使用

作者: Li_Cheng | 来源:发表于2016-06-01 15:45 被阅读8569次

个人博客: LiCheng的博客

引言

在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私数据,还是不能完全解决安全问题。因此:提交用户的隐私数据时,一定不要明文提交,要加密处理后再提交。

常见的加密算法
MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ DSA \ AES

加密算法的选择
一般公司都会有一套自己的加密方案,按照公司接口文档的规定去加密。

MD5 加密

MD5简介


  1. 简单说明:
    MD5:全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
    效果:对输入信息生成唯一的128位散列值(32个字符)
    MD5生成的是固定的128bit,即128个0和1的二进制位,而在实际应用开发中,通常是以16进制输出的,所以正好就是32位的16进制,说白了也就是32个16进制的数字。

  2. MD5的特点:
    (1)输入两个不同的明文不会得到相同的输出值
    (2)根据输出值,不能得到原始的明文,即其过程不可逆(只能加密, 不能解密)

  3. MD5的应用:
    由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
    大多数的登录功能向后台提交密码时都会使用到这种算法

  4. 注意点:
    (1)一定要和后台开发人员约定好,MD5加密的位数是16位还是32位(大多数都是32位的),16位的可以通过32位的转换得到。
    (2)MD5加密区分 大小写,使用时要和后台约定好。

  5. MD5解密:
    解密网站: http://www.cmd5.com/

MD5代码:


自定义一个继承自NSObject的类:LCMD5Tool类
LCMD5Tool.h文件:

#import <Foundation/Foundation.h>

@interface LCMD5Tool : NSObject

/**
 *  MD5加密, 32位 小写
 *
 *  @param str 传入要加密的字符串
 *
 *  @return 返回加密后的字符串
 */
+(NSString *)MD5ForLower32Bate:(NSString *)str;

/**
 *  MD5加密, 32位 大写
 *
 *  @param str 传入要加密的字符串
 *
 *  @return 返回加密后的字符串
 */
+(NSString *)MD5ForUpper32Bate:(NSString *)str;

/**
 *  MD5加密, 16位 小写
 *
 *  @param str 传入要加密的字符串
 *
 *  @return 返回加密后的字符串
 */
+(NSString *)MD5ForLower16Bate:(NSString *)str;

/**
 *  MD5加密, 16位 大写
 *
 *  @param str 传入要加密的字符串
 *
 *  @return 返回加密后的字符串
 */
+(NSString *)MD5ForUpper16Bate:(NSString *)str;

@end

LCMD5Tool.m文件:

#import "LCMD5Tool.h"
#import <CommonCrypto/CommonCrypto.h>

@implementation LCMD5Tool

#pragma mark - 32位 小写
+(NSString *)MD5ForLower32Bate:(NSString *)str{
    
    //要进行UTF8的转码
    const char* input = [str 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 *)MD5ForUpper32Bate:(NSString *)str{
    
    //要进行UTF8的转码
    const char* input = [str 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 *)MD5ForUpper16Bate:(NSString *)str{
    
    NSString *md5Str = [self MD5ForUpper32Bate:str];
    
    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}


#pragma mark - 16位 小写
+(NSString *)MD5ForLower16Bate:(NSString *)str{
    
    NSString *md5Str = [self MD5ForLower32Bate:str];
    
    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}

@end

使用:
  1. 导入MD5Tool.h
  2. 调用类方法:
    NSString *str1 = [MD5Tool MD5ForLower16Bate:@"123456"];
    NSLog(@"小写16位:%@", str1);
    
    NSString *str2 = [MD5Tool MD5ForLower32Bate:@"123456"];
    NSLog(@"小写16位:%@", str2);
    
    NSString *str3 = [MD5Tool MD5ForUpper16Bate:@"123456"];
    NSLog(@"大写16位:%@", str3);
    
    NSString *str4 = [MD5Tool MD5ForUpper32Bate:@"123456"];
    NSLog(@"大写32位:%@", str4);
好了, MD5加密就这么搞定了, 可以通过上面的解密网站测试自己的加密是否正确!!!

<br />
<br />

相关文章

  • iOS开发 关于MD5加密的相关使用

    MD5加密算法多用于文件的验证, 比如说登录密码的匹配就是利用MD5的加密方式,还比如说安卓手机刷ROM包, wi...

  • iOS开发 关于MD5加密的相关使用

    个人博客: LiCheng的博客 引言 在开发应用的时候,数据的安全性至关重要,而仅仅用POST请求提交用户的隐私...

  • iOS MD5,Base64,Des,SHA 相关加密和解密

    iOS MD5,Base64,Des,SHA 相关加密和解密 很简单的Demo,直接当做工具使用即可。 菜鸟走向大...

  • iOS加密

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

  • iOS 数据加密

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

  • iOS如何使用MD5加密

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

  • 面试题总结

    1. iOS开发中的加密方式 iOS加密相关算法框架:CommonCrypto。 对称加密: DES、3DES、A...

  • 【转·链接】iOS FMDB对数据库进行加密

    iOS - 使用FMDB进行数据库加密iOS FMDB数据库加密相关

  • iOS 加密解密

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

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

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

网友评论

  • 旮哥:建议楼主删帖,别误导小白。MD5只是摘要算法的一种,大部分时候是配合非对称加密做签名效验。
    MD5被广泛使用是因为具有较强的抗碰撞性。除了MD5之外还有很多摘要算法,在不同数据领域各自的碰撞性也有差别。

    文章里和加密扯不上关系,MD5固定长度128位=16字节,通常每个字节按16进制格式转化为文本在HTTP协议(超文本协议)上传输,且不可逆!
  • foolish_hungry:你的16 位截取字符串,为什么要循环呢?
  • 岸左雨竹:印象中官方有md5 加密方法吧?
    Li_Cheng:@岸左雨竹 这个就是基于自带的来封装的
  • 柚子_童鞋:有空可以把其他的加密方法(比如RSA 之类)集成在一个工具类里。
  • 28bb64fffadd:问下用此种方法加密,因为不可逆,不能解密,那吧用户信息发给服务器,服务器如何识别和存储呢
    97e5a0ffa2ac:很简单!后台不用解密识别,对你的数据进行进行相同加密 如果和你传的sign一样 验证通过
    do_my_best:md5本来就不是用来加解密的,只是用来做数字摘要防止信息被篡改的,服务端重新做一次md5,对比客户端传过来的sign,信息一致,则没有被篡改,信息不一致,则被篡改了
    Society2012:是不是要先把md5加密后的密单独文传到服务器,在进行后面的对比操作?
  • _Nevermore:算的结果有问题 对同一个字符串加密 在微信的官方的在线验证签名的地方 结果不一样
  • 哇丶啦咔咔:为什么32位大小写的方法一毛一样。
    Li_Cheng:@哇丶啦咔咔 已修改, 谢谢
    哇丶啦咔咔:你自己看下你的代码,我用command+F 发现2个方法实现真的是一毛一样。 区分大小写。
    Li_Cheng:@哇丶啦咔咔 看X 和 x 的区别

本文标题:iOS开发 关于MD5加密的相关使用

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