32位md5加密 ios开发_ios开发md5加密 - CSDN
精华内容
参与话题
  • IOS MD5加密

    千次阅读 2018-04-11 14:26:54
    在软件开发过程中,对数据的加密是保证数据安全的重要手段,在 IOS 开发中,对于发送的网络请求,有时候是需要进行加密处理的,例如,采用阿里云的直播方案,在获取推流地址时,需要对 Token 地址进行加密处理。MD5 ...

    在软件开发过程中,对数据的加密是保证数据安全的重要手段,在 IOS 开发中,对于发送的网络请求,有时候是需要进行加密处理的,例如,采用阿里云的直播方案,在获取推流地址时,需要对 Token 地址进行加密处理。

    MD5 加密是一种比较常见的加密算法,它是一种特殊的加密方式。针对其独特性,总结为以下几点:

    1. 长度固定
    不管多长的字符串,加密之后都是一样的长度。

    2. 容易计算
    字符串和文件的加密过程是相对较容易的,程序猿很容易理解并做出加密工具。

    3. 细微性
    不管多大的文件,只要改变里面的某个字符,都会导致 md5 值的改变,针对这个特点,有些软件和网站提供的下载资源,其中包含了文件的 md5 码,用户下载后只需要用工具测一下下载好的文件的 md5 码,通过对比就能知道文件是否有过变动。

    4. 不可逆性
    Base64 加密是可逆的,MD5 加密目前来说一般是不可逆的。这也大大提高了数据的安全性。

    主流的编程语言都已包含了对 MD5 加密的算法实现封装。核心代码如下:

    - (NSString *)md5
    {
        const char *cStr = [self UTF8String];
        unsigned char result[16];
        CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
        return [NSString stringWithFormat:
               @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                result[0], result[1], result[2], result[3], 
                result[4], result[5], result[6], result[7],
                result[8], result[9], result[10], result[11],
                result[12], result[13], result[14], result[15]
        ];
    }

    注意点,需要导入头文件 CommonCrypto/CommonDigest.h

    程序运行示例如下所示(对字符串“123456789”进行加密),已抽取分类 NSString+MD5:
    这里写图片描述

    该 demo 已上传至GitHub:https://github.com/herojack/IOS-MD5.git

    项目转移至码云:https://gitee.com/FeiHuangFei/iosgithub_migration/tree/master/IOS-MD5-master

    展开全文
  • iOS-MD5加密32位扩展类

    千次阅读 2016-04-27 09:55:34
    NSString+MD5.h// // NSString+MD5.h // Spread // // Created by 邱学伟 on 16/4/26. // Copyright © 2016年 邱学伟. All rights reserved. //#import <Foundation/Foundation.h>@interface NSString (MD5) /** 将...

    NSString+MD5.h

    //
    //  NSString+MD5.h
    //  Spread
    //
    //  Created by 邱学伟 on 16/4/26.
    //  Copyright © 2016年 邱学伟. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface NSString (MD5)
    /** 将字符串经MD5加密 */
    +(NSString *)MD5:(NSString *)str;
    @end
    

    NSString+MD5.m

    //
    //  NSString+MD5.m
    //  Spread
    //
    //  Created by 邱学伟 on 16/4/26.
    //  Copyright © 2016年 邱学伟. All rights reserved.
    //
    
    #import "NSString+MD5.h"
    #import <CommonCrypto/CommonDigest.h>
    
    @implementation NSString (MD5)
    
    /** 将字符串经MD5加密 */
    +(NSString *)MD5:(NSString *)str{
        const char *cStr = [str UTF8String];
        unsigned char result[16];
        CC_MD5(cStr, strlen(cStr), result); // This is the md5 call
        NSLog(@"MD5->>>>>>%@",[NSString stringWithFormat:
                               @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                               result[0], result[1], result[2], result[3],
                               result[4], result[5], result[6], result[7],
                               result[8], result[9], result[10], result[11],
                               result[12], result[13], result[14], result[15]
                               ]);
        return [NSString stringWithFormat:
                @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
                result[0], result[1], result[2], result[3],
                result[4], result[5], result[6], result[7],
                result[8], result[9], result[10], result[11],
                result[12], result[13], result[14], result[15]
                ];
    }
    
    @end
    
    展开全文
  • 任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要。在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障。 本节...

    任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要。在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障。
    本节只讲原理和应用,具体的代码请到这里下载,都是封装好的工具类,包括终端命令操作。下面介绍常用三种加密。

    一、哈希HASH

    1.MD5加密

    MD5加密的特点:

    1. 不可逆运算
    2. 对不同的数据加密的结果是定长的32位字符(不管文件多大都一样)
    3. 对相同的数据加密,得到的结果是一样的(也就是复制)。
    4. 抗修改性 : 信息“指纹”,对原数据进行任何改动,哪怕只修改一个字节,所得到的 MD5 值都有很大区别.
    5. 弱抗碰撞 : 已知原数据和其 MD5 值,想找到一个具有相同 MD5 值的数据(即伪造数据)是非常困难的.
    6. 强抗碰撞: 想找到两个不同数据,使他们具有相同的 MD5 值,是非常困难的

    MD5 应用:

    一致性验证:MD5将整个文件当做一个大文本信息,通过不可逆的字符串变换算法,产生一个唯一的MD5信息摘要,就像每个人都有自己独一无二的指纹,MD5对任何文件产生一个独一无二的数字指纹。

    那么问题来了,你觉得这个MD5加密安全吗?其实是不安全的,不信的话可以到这个网站试试:md5破解网站。可以说嗖地一下就破解了你的MD5加密!!!

    2.加“盐”

    可以加个“盐”试试,“盐”就是一串比较复杂的字符串。加盐的目的是加强加密的复杂度,这么破解起来就更加麻烦,当然这个“盐”越长越复杂,加密后破解起来就越麻烦,不信加盐后然后MD5加密,再去到md5破解网站破解试试看,他就没辙了!!!

    哈哈,这下应该安全了吧!答案是否定的。如果这个“盐”泄漏出去了,不还是完犊子吗。同学会问,“盐”怎么能泄漏出去呢?其实是会泄漏出去的。比如苹果端、安卓端、前端、后台等等那些个技术人员不都知道吗。。都有可能泄漏出去。又有同学说那就放在服务器吧,放在服务器更加不安全,直接抓包就抓到了!!!

    加固定的“盐”还是有太多不安全的因素,可以看出没有百分百的安全,只能达到相对安全(破解成本 > 破解利润),所以一些金融的app、网站等加密比较高。

    下面来介绍另外两种加密方案

    3.SHA加密

    安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(Digital Signature Standard DSS)里面定义的数字签名算法(Digital Signature Algorithm DSA)。对于长度小于2^64位的消息,SHA1会产生一个160位的消息摘要。当接收到消息的时候,这个消息摘要可以用来验证数据的完整性。在传输的过程中,数据很可能会发生变化,那么这时候就会产生不同的消息摘要。当让除了SHA1还有SHA256以及SHA512等。

    SHA1有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。

    4.HMAC加密

    HMAC:给定一个密钥,对明文加密,做两次“散列”,得到的结果还是32为字符串。在实际开发中,密钥是服务器生成,客户端发送请求会拿到KEY。一个账号对应一个KEY

    以注册为例:当用户把账号提交给服务器,服务器会验证账号的合法性,如果合法就会生成个KEY给客户端(这个KEY只有在注册的时候会出现一次,一个账号只对应一个KEY);客户端会用拿到的KEY给密码用HMAC方式加密(32位字符串)发给服务器,最终服务器会保存这个HMAC密码。这样就注册成功了!以后再登录就会服务器就会比对这个HMAC密码是否相等决定能否登录成功。

    这里写图片描述

    这样一来好像安全了很多哎!即使黑客拿到了客户KEY,也只能拿到一个用户的信息,也就是说只丢失了一个客户的信息。然而上面的加“盐”方式加密,如果“盐”泄漏了,那丢失的可是所有用户信息啊。安全性有了很大提升有木有!!!

    但是这还是不够安全,还可以更佳安全!

    以登录为例:当用户点击登录时,会生成HMAC密码,然后用HMAC密码拼接上一个时间串(服务器当前时间,201801171755,只到分钟),然后一起MD5加密,最后客户端会把加上时间的HMAC值发给服务器;这时候服务器也会用已经存起来的HMAC密码拼接上一个时间串(服务器当前时间),然后一起MD5加密,最后用这个加密后的HMAC值和客户端发来的进行HMAC值对比,对此一样则登录成功!!!

    这里写图片描述

    疑问1.为什么一定要用服务器的时间呢?
    答:因为客户端可能会修改自己的手机时间,以服务器为准比较好。
    疑问2.如果网络有延迟怎么办?
    答:这里服务器可以对比两次,再往后加一分钟对比一次。试想一下如果网络延迟了两分钟,还没请求到时间,那这个网络也是够了!!!
    疑问3.为什么不让服务器直接修改KEY呢?
    答:这样也能保证每次登录的HMAC值不一样?注意:这样做服务器会频繁的更新KEY,加大服务器的压力,一般不会去更新,除非更换密码才会更新。当然服务器可以定期去更新KEY,这样安全等级又会提高,更加安全!!

    这个时候如果黑客拦截到了你加了时间戳的HMAC值,不能在两分钟内破解密码,那么他就永远登不进去了。这个密码的破解难度是很大的,代价也高,这样是不是就很安全了,是的,这样就更加安全!!!

    二、对称加密

    简介:
    对称加密算法又称传统加密算法。
    加密和解密使用同一个密钥。

    加密解密过程:明文->密钥加密->密文,密文->密钥解密->明文。

    示例:
    密钥:X
    加密算法:每个字符+X
    明文:Hello
    密钥为 1时加密结果:Ifmmp
    密钥为 2时加密结果:Jgnnq

    优缺点:
    算法公开,计算量小,加密速度快,加密效率高
    双方使用相同的钥匙,安全性得不到保证

    注意事项:
    密钥的保密工作非常重要
    密钥要求定期更换

    经典加密算法有三种:
    1. DES(Data Encryption Standard):数据加密标准(现在用的比较少,因为它的加密强度不够,能够暴力破解)
    2. 3DES:原理和DES几乎是一样的,只是使用3个密钥,对相同的数据执行三次加密,增强加密强度。(缺点:要维护3个密钥,大大增加了维护成本)
    3. AES(Advanced Encryption Standard):高级加密标准,目前美国国家安全局使用的,苹果的钥匙串访问采用的就AES加密。是现在公认的最安全的加密方式,是对称密钥加密中最流行的算法。

    加密模式:
    ECB:电子密码本,就是每个块都是独立加密

    这里写图片描述

    CBC:密码块链,使用一个密钥和一个初始化向量(IV)对数据执行加密转换

    这里写图片描述

    只要是对称加密都有 ECB和 CBC模式,加密模式是加密过程对独立数据块的处理。对于较长的明文进行加密需要进行分块加密,在实际开发中,推荐使用CBC的,ECB的要少用。

    三、非对称加密RSA

    简介:
    1. 对称加密算法又称现代加密算法。
    2. 非对称加密是计算机通信安全的基石,保证了加密数据不会被破解。
    3. 非对称加密算法需要两个密钥:公开密钥(publickey) 和私有密(privatekey)
    4. 公开密钥和私有密钥是一对

    如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密。
    如果用私有密钥对数据进行加密,只有用对应的公开密钥才能解密。

    特点:
    算法强度复杂,安全性依赖于算法与密钥。
    加密解密速度慢。

    与对称加密算法的对比:
    对称加密只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。
    非对称加密有两种密钥,其中一个是公开的。

    RSA应用场景:
    由于RSA算法的加密解密速度要比对称算法速度慢很多,在实际应用中,通常采取
    数据本身的加密和解密使用对称加密算法(AES)。
    用RSA算法加密并传输对称算法所需的密钥。

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

    千次阅读 2016-06-08 16:18:39
    MD5简介 ...MD5生成的是固定的128bit,即128个0和1的进制,而在实际应用开发中,通常是以16进制输出的,所以正好就是32位的16进制,说白了也就是32个16进制的数字。 MD5的特点: (1)输

    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);
    展开全文
  • IOS开发基础之—MD5加密算法

    万次阅读 2011-10-09 11:30:59
    MD5加密算法,实现类别如下: #import @interface NSString (md5) -(NSString *) md5HexDigest; @end #import "NSString+MD5
  • ios md5加密

    千次阅读 2019-03-26 14:18:10
    ios md5加密 #import <CommonCrypto/CommonDigest.h> + (NSString *)md5:(NSString *)string { const char *cStr = [string UTF8String]; unsigned char digest[CC_MD5_DIGEST_LENGTH]; CC_MD5(cSt...
  • iOS开发MD5加密专栏

    千次阅读 2017-09-02 11:58:59
    加密效果:对输入的信息生成唯一的128散列值(32个字符)。 MD5特点优势:输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,该过程是不可逆的。 MD5应用场景:由于MD5加密算法具有很好的...
  • iOS开发——用户信息使用MD5加密

    千次阅读 2016-08-18 14:42:00
    iOS开发——用户信息使用MD5加密
  • iOS项目中使用OpenSSL库

    千次阅读 2016-11-30 17:26:43
    iOS项目中使用OpenSSL库由于项目中android端和PC端的加密方式是PBEwithMD5andDes,对于加密算法这个真不太熟悉,相比于BASE64或者MD5,这个算法在网上比较难找,终于在stackoverflow上找到一个和android端比较像的...
  • iOS MD5 和 Base64加密

    千次阅读 2017-09-08 09:31:50
    加密学习 加密相关 网络应用程序数据的原则: 1.在网络上“不允许”传输用户隐私数据的“明文” 2.在本地“不允许”保存用户隐私数据的“明文” 在网络发展趋势日渐迅猛的今天,数据的安全性也越来越重要。因此...
  • iOS逆向 查看ipa包是否加密

    千次阅读 2017-06-26 11:59:09
    从appstore上下载的ipa包,都是经过苹果公司加了密的,我们做逆行开发首先就需要把ipa加密的壳给砸掉,砸壳之后我们如何查看是否砸壳成功呢?微信砸壳之后的文件为:WeChat.decrypted打开终端,进入到WeChat....
  • 使用Swift 3.0实现原生的MD5加密

    千次阅读 2017-05-17 21:30:44
    MD5的全称是MessageDigest Algorithm 5,即消息摘要算法第五版,是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。在90年代初由MIT Laboratory for Computer Science 和RSA Data Security Inc的...
  • iOS开发-iOS加密iOS常用加密方法

    千次阅读 2017-01-31 15:31:25
    最近技术群里看到了也有人在问关于iOS加密的问题,今天就顺便解答一下。 常用的是MD5加密,这是一种单向加密,实现如下: 需要添加的类库: #import #import #import #include MD5实现方法(16): + ...
  • iOS用ZipArchive文件解压缩、压缩文件
  • ios MD5加密32位(区分大小写)

    千次阅读 2017-06-01 18:15:15
    #import "NSString+change.h" #import <CommonCrypto/CommonDigest.h> @implementation NSString (change) ...- (NSString*)md532BitLower { const char *cStr = [self UTF8String]; unsigned
  • IOS端与Java端MD5加密方法

    千次阅读 2016-09-14 16:12:29
    IOS端与Java端MD5加密方法 关于NSString的MD5加密,这不难,在网上可以搜到很多算法,主要是跟后台的统一会出问题,对同一段字符串,ios和java加密后的结果可能不一样,很坑爹。现在贴一下ios端和后台java的代码...
  • iOS开发之常用的加密方法

    千次阅读 2016-05-11 17:59:46
    iOS开发中的一些加密方法
  • 如果你们在加密的时候,后台告诉你,用哈希算法或者MD5算法,然后用加密key来加密,你可能会一脸懵逼,博主也是第一次听说哈希加密要用加密key,为了弥补下知识空缺,博主就在网上查找资料,结果找到了这个东西:...
  • iOS MD5加密算法

    2018-05-19 09:57:12
    #pragma mark - 32位 小写 + (NSString *)MD5ForLower32Bate:(NSString *)str { //要进行UTF8的转码 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input
1 2 3 4 5 ... 20
收藏数 5,007
精华内容 2,002
热门标签
关键字:

32位md5加密 ios开发