【iOS进阶】【Web基础】4-加密机制、MD5

一、本地数据存储的原则

1>任何应用程序都不能在本地直接存储与安全相关的用户信息

2>任何应用程序在于服务器传递数据时,都不能直接传输与安全相关的用户信息

二、数据加密——MD5

1>MD5简介

  1.Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。

   该算法的文件号为RFC 1321

  2.MD5用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现

  3.MD5的典型应用是对一段字节串产生指纹,以防止被“篡改”。例如,可以对一个readme.txt生成一个MD5的值并记录在案,如果其他人修改了

   文件中的任何内容,对该文件重新计算的MD5值会发生变化

  4.MD5还广泛用于操作系统的登录认证上,如Unix、各类BSD系统登录密码、数字签名等诸多方面

2>MD5要点

  1.不可逆

  2.同样的数据加密结果是一样的

  3.加点”盐”(私钥)

3>MD5破译网站(大型收集数据库):http://www.cmd5.com

三、MD5具体实现

1>编写NSString的分类Password。该分类的核心内容是MD5的加密算法,此算法是公开的

(1)NSString+Password.h文件:

#import <Foundation/Foundation.h>

@interface NSString (Password)

/**
 *  加盐算法
 */
-(NSString *)myMD5;

/**
 *  32位MD5加密
 *  @return 32位MD5加密结果
 */
- (NSString *)MD5;

/**
 *  SHA1加密
 *  @return SHA1加密结果
 */
- (NSString *)SHA1;

@end

(2)NSString+Password.m文件:

#import "NSString+Password.h"
#import <CommonCrypto/CommonDigest.h>

/**
 *  盐,类似于私钥
 */
static NSString *token = @"123123KHGKJFg^%&^%#%$#^wegfkhjgyu123123125231";

@implementation NSString (Password)

/**
 *  加盐算法
 */
-(NSString *)myMD5{
    NSString *str = [NSString stringWithFormat:@"%@%@",self,token];
    return [str MD5];
}

#pragma mark 使用MD5加密字符串
- (NSString *)MD5
{
    const char *cStr = [self UTF8String];
    unsigned char digest[CC_MD5_DIGEST_LENGTH];

    CC_MD5(cStr, (int)strlen(cStr) , 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;
}

#pragma mark 使用SHA1加密字符串
- (NSString *)SHA1
{
    const char *cStr = [self UTF8String];
    NSData *data = [NSData dataWithBytes:cStr length:self.length];
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];

    CC_SHA1(data.bytes, (int)data.length, digest);

    NSMutableString *result = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];

    for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
        [result appendFormat:@"%02x", digest[i]];
    }
    
    return result;
}

@end

2>运用MD5对密码加密

(1)定义一个保存加密的密码的变量myPwd

@property (nonatomic,strong) NSString *myPwd;

(2)实现myPwd的get()方法

-(NSString *)myPwd{
    return [self.pwdView.text myMD5];
}

(3)输入密码,先在本地获得指定用户名的加密后的密码

NSLog(@"%@",self.myPwd);

(4)更新数据库

(5)更改URL字符串

(6)加密完成,成功获取返回的数据

 

/**
    1. 用户密码明文只能出现在用户登录窗口,不能在其他任何地方出现密码明文
    2. 其他位置无论是服务器,还是本地,还是传输过程中,统一使用加密后的算法
 */

 

posted @ 2015-04-24 21:04  锟斤拷Dy  阅读(120)  评论(0)    收藏  举报