2016-08-18 14:42:00 huangyongf 阅读数 1962
  • iOS逆向开发案例

    本套课程相信能够帮助到想学习逆向的你,为你节约大量的时间,将时间充分运用到实践的过程中,并非在逆向的“门前”爬坑。在这个系列里,我们从密码学入手,了解常见加密算法,通过数字签名等技术学习iOS应用签名。剖析原理,通过重签名技术绕过系统检测开启逆向之旅。

    7677 人正在学习 去看看 李文瀚

iOS开发——用户信息使用MD5加密

MD5说明:MD5是安卓和ios系统中最常用的加密方式,其特点是加密后生成32位的字符串。且加密后的数据不可逆,网络上的暴力破解网页只是将MD5加密后生成的32wei位字符串与自行生成的密码字符串进行比对,字符串相同就输出对应的密码。这种方式只能破解简单的密码。有复杂数据的密码很难进行破解。因此用户的信息安全可以得到保证。因为MD5码是不可逆的,所以用户密码忘记之后只能设置新的密码,不能取回原来的密码。为了加强MD5加密的安全性,系统提供了加盐的方法,更进一步保证了数据的安全性。

MD5特点:

对任意的数据进行计算,生成固定长度的字符串.32个字符.

一般用来加密密码.

有时候也用来验证文件下载时,是否被篡改过.

文件下载完成之后计算文件的md5值,与服务器计算的MD5值比较,如果不一样那么这个文件在下载的过程中被篡改了.

使用终端命令获取加密后的MD5

#得到文件的MD5值

$ md5 文件名

#得到字符串的MD5值

md5 -s "string"

MD5加密方案,和实现步骤:

先导入分类

#import"NSString+Hash.h"

方案一 :

直接MD5计算

psd = [psd md5String];

Base64与MD5的对比:

Base64编码 : "加密"简单,算法可逆.毫无安全性可言.不能用来加密密码.

MD5 : 加密过程复杂,算法不可逆,安全性高,常用来加密密码等用户的敏感信息.但是简单的密码MD5加密之后可以暴力破解.

暴力破解网站 :http://www.cmd5.com/

方案二 : 密码加盐

如果原始密码过于简单,直接进行MD5加密是很容易被暴力破解的.

为了增强密码的安全性,防止加密的密码被暴力破解,可以向原始密码中加盐.

盐 : 服务器端和客户端约定的一个字符串.

MD5+盐 : 原始密码+盐拼接出新的密码字符串,再进行MD加密.

以上为加一勺盐,比单纯的直接MD5加密安全性要高.

盐要足够的咸,越咸越安全.

//

盐。和加盐加密的方法。

NSString*salt = @"123zxcASD!@#";

psd=[[psd stringByAppendingString:salt] md5String];

方案三 : HMAC

HMAC : 加两勺盐.加两勺盐的密码加密强度比加一勺盐要高.

原理 : 原始密码+盐进行MD5计算,结算的结果+原始密码再进行MD5计算.

//盐

NSString *salt = @"123zxcASD!@#";

psd=[psd hmacMD5StringWithKey:salt];

注意

不必要用不可逆的加密算法加密密码并保存到本地.因为不可逆的加密算法加密的数据不能还原回来。保存到本地的密码无法正常使用。

苹果提供了钥匙串专门保存用户的私密信息到本地.苹果保存钥匙串的文件并不公开,这是为了进一步保证用户信息的安全性。

2016-04-18 09:53:36 qq_30513483 阅读数 1652
  • iOS逆向开发案例

    本套课程相信能够帮助到想学习逆向的你,为你节约大量的时间,将时间充分运用到实践的过程中,并非在逆向的“门前”爬坑。在这个系列里,我们从密码学入手,了解常见加密算法,通过数字签名等技术学习iOS应用签名。剖析原理,通过重签名技术绕过系统检测开启逆向之旅。

    7677 人正在学习 去看看 李文瀚
简介

MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经过MD5处理后看不到原文,是一种加密算法。

MD5的特点

输入两个不同的明文不会得到相同的输出值
根据输出值,不能得到原始的明文,即其过程不可逆

MD5的应用

由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
主要运用在数字签名、文件完整性验证以及口令加密等方面

  • 比如发送一个电子文档,发送前,我先得到MD5的输出结果a。然后在对方收到电子文档后,对方也得到一个MD5的输出结果b。如果a与b一样就代表中途未被篡改。
  • 比如我提供文件下载,为了防止不法分子在安装程序中添加木马,我可以在网站上公布由安装文件得到的MD5输出结果。
    MD5解密网站:http://www.cmd5.com

为了方便使用,我们可以把md5写成一个分类。

头文件
#import <Foundation/Foundation.h>

@interface NSString (MD5)

- (NSString *)md5_32bit;
- (NSString *)MD5_32BIT;

@end
实现文件
#import "NSString+MD5.h"
#import <CommonCrypto/CommonDigest.h>

@implementation NSString (MD5)

- (NSString *)md5_32bit {
    const char *cStr = [self UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, (CC_LONG)self.length, digest );
    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [result appendFormat:@"%02x", digest[i]];
    return result;
}

- (NSString *)MD5_32BIT {
    const char *cStr = [self UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    CC_MD5( cStr, (CC_LONG)self.length, digest );
    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
        [result appendFormat:@"%02X", digest[i]];
    return result;
}

@end


文/梦亦趣(简书作者)
原文链接:http://www.jianshu.com/p/8898b0bb3c94
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
2013-10-24 23:02:30 sharkleegroup 阅读数 5142
  • iOS逆向开发案例

    本套课程相信能够帮助到想学习逆向的你,为你节约大量的时间,将时间充分运用到实践的过程中,并非在逆向的“门前”爬坑。在这个系列里,我们从密码学入手,了解常见加密算法,通过数字签名等技术学习iOS应用签名。剖析原理,通过重签名技术绕过系统检测开启逆向之旅。

    7677 人正在学习 去看看 李文瀚
一、MD5算法简介

         MD5的全称是Message Digest Algorithm 5(消息摘要算法第五版),是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。在90年代初由MIT Laboratory for Computer Science 和RSA Data Security Inc的Ronald L.Rivest开发,经MD2、MD3和MD4发展而来。Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。 

        MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数
        然而虽然MD5属于单向加密的加密算法,但通过一些方法仍然能进行破解。2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。(注意:并非是真正的破解,只是加速了杂凑冲撞)
        MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。 
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的, 用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。
二、MD5算法实现

在iOS开发中,如果某个字符串需要进行MD5加密,则按如下方法即可实现需求:

1、包含头文件“CommonDigest.h

        #import<CommonCrypto/CommonDigest.h>

         2、编写下述方法。函数参数为需要加密的字符串,返回值为加密后得到的结果,也是一个字符串。

  1. - (NSString *)md5HexDigest:(NSString *)url  
  2. {  
  3.     const char *original_str = [url UTF8String];  
  4.     unsigned char result[CC_MD5_DIGEST_LENGTH];  
  5.     CC_MD5(original_str, strlen(original_str), result);  
  6.     NSMutableString *hash = [NSMutableString string];  
  7.     for (int i = 0; i < 16; i++)  
  8.         [hash appendFormat:@"%02X", result[i]];  
  9.     return [hash lowercaseString];  
  10. }  
2014-08-08 11:21:06 u012894479 阅读数 507
  • iOS逆向开发案例

    本套课程相信能够帮助到想学习逆向的你,为你节约大量的时间,将时间充分运用到实践的过程中,并非在逆向的“门前”爬坑。在这个系列里,我们从密码学入手,了解常见加密算法,通过数字签名等技术学习iOS应用签名。剖析原理,通过重签名技术绕过系统检测开启逆向之旅。

    7677 人正在学习 去看看 李文瀚

[iphone开发] iOS SDK自带 md5加密

#import <CommonCrypto/CommonDigest.h>
//md5 32位 加密 (小写)
+ (NSString *)md5:(NSString *)str {
    const char *cStr = [str UTF8String];
    unsigned char result[32];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSString stringWithFormat:
            @"xxxxxxxxxxxxxxxx",
            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],
            result[16], result[17],result[18], result[19],
            result[20], result[21],result[22], result[23],
            result[24], result[25],result[26], result[27],
            result[28], result[29],result[30], result[31]];
}
//md5 16位加密 (大写)
-(NSString *)md5:(NSString *)str {
    constchar *cStr = [str UTF8String];
    unsignedchar result[16];
    CC_MD5( cStr, strlen(cStr), result );
    return [NSStringstringWithFormat:            @"%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]
            ]; 
}
2015-07-13 13:15:38 sinat_28709097 阅读数 480
  • iOS逆向开发案例

    本套课程相信能够帮助到想学习逆向的你,为你节约大量的时间,将时间充分运用到实践的过程中,并非在逆向的“门前”爬坑。在这个系列里,我们从密码学入手,了解常见加密算法,通过数字签名等技术学习iOS应用签名。剖析原理,通过重签名技术绕过系统检测开启逆向之旅。

    7677 人正在学习 去看看 李文瀚

#import <CommonCrypto/CommonDigest.h> // Need to import for CC_MD5 access

复制代码
//将字符串进行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
    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]
        ]; 
}




在线测试MD5:http://www.cmd5.com/

32位MD5加密Java代码

阅读数 161

iOS开发 - MD5加密

阅读数 324

没有更多推荐了,返回首页