【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. 其他位置无论是服务器,还是本地,还是传输过程中,统一使用加密后的算法 */

浙公网安备 33010602011771号