MD5加密详解

////  ViewController.m//  04-POST请求模拟登录////  Created by Shenzhen_iOS_07 on 16/10/29.//  Copyright © 2016年 Shenzhen_iOS_07. All rights reserved.      /******************** MD5 加密简介  *****************************//*    1.md5简单的说就是对你对你的密码进行处理复杂化, 注意的是你单独对密码加密,怎么去和后台密码进行匹配,所以一般加密算法是后台提供的,,客户端和后台保证一致的加密算法才能匹配成功. 比如将"zhang"的字符创进行加密后得出"dgsjdfjsk32786^%#$%$^fmnnkdcjfsfds",这个字符串,我们就用这个字符串去登录后台服务器,后台服务器也会对"zhang"字符串进行加密由于算法相同得出的结果也会相同"dgsjdfjsk32786^%#$%$^fmnnkdcjfsfds". 所以匹配到后就登录成功了;    2.加密成功后在网路请求中传输的就是你加密后的密码,,,,别人不知道你的加密算法,是逆推不到你加密前的密码    3.使用操作很简单:首先直接拷贝"Security"文件夹导入到你的项目中,文件夹中包含各种字符串的加密算法..可供选择.        4.具体操作参考下列实例代码,实现过程简单,,注释很详细 */#import "MD5VC.h"#import "NSString+Hash.h"#import "SSKeychain.h"@interface MD5VC ()@property (weak, nonatomic) IBOutlet UITextField *nameTextField;@property (weak, nonatomic) IBOutlet UITextField *passwordTextField;@end@implementation MD5VC- (void)viewDidLoad {    [super viewDidLoad];        // 程序一启动,就读取本地的用户信息;如果有,就展示到输入框.没有就自己输入    [self readUserInfo];}/* 加密 密码在网络中传输之前,加密 (MD5) 密码保存到本地之前,加密 (SSKeychain)  解密 密码在展示和使用之前,解密 (SSKeychain) */// POST请求模拟登录- (IBAction)login:(id)sender{    // 1.URL (POST请求的URL没有参数,参数封装在请求体)    NSURL *URL = [NSURL URLWithString:@"http://localhost/php/login/login.php"];        // 2.创建请求可变对象    NSMutableURLRequest *requestM = [NSMutableURLRequest requestWithURL:URL];    // 2.1 设置请求方法为POST    requestM.HTTPMethod = @"POST";    // 2.2 设置请求体 : 二进制的数据    requestM.HTTPBody = [self getHTTPBody];        // 2.获取单例session,发起任务,启动任务    [[[NSURLSession sharedSession] dataTaskWithRequest:requestM completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {                // 3.处理响应        if (error == nil && data != nil) {            // 4.反序列化            NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];            // 5.判断是否登录成功            if ([result[@"userId"] intValue] == 1) {                NSLog(@"登录成功");                                // 登录成功之后,保存用户信息                [self saveUserInfo];                            } else {                NSLog(@"登录失败");            }                    } else {            NSLog(@"%@",error);        }            }] resume];}// 获取请求体二进制的主方法- (NSData *)getHTTPBody{#pragma mark-MD5加盐,加两勺勺盐 : 后台设计的盐    NSString *salt = @"!@#ZXCasd258";    NSString *encodePsd = [self.passwordTextField.text hmacMD5StringWithKey:salt];        // 把加密之后的密码,放进请求体    NSString *body = [NSString stringWithFormat:@"username=%@&password=%@",self.nameTextField.text,encodePsd];    // 把请求体字符串转成二进制形式的请求体;dataUsingEncoding : 直接把字符串转成二进制    NSData *HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];        return HTTPBody;}// 保存用户信息到偏好设置- (void)saveUserInfo{    // 保存用户名    [[NSUserDefaults standardUserDefaults] setObject:self.nameTextField.text forKey:@"name"];        // 需求 : 密码保存到本地,需要加密和能够解密 (钥匙串)    /*    参数1 : 你要保存到钥匙串的密码    参数2 : APP的唯一标识符,为哪个APP保存密码    参数3 : 为哪个APP里面的哪个账号保存密码          提示 : 因为XCode8需要开启钥匙串的权限;XCode7不需要    */    BOOL isSaved = [SSKeychain setPassword:self.passwordTextField.text forService:[NSBundle mainBundle].bundleIdentifier account:self.nameTextField.text];    NSLog(@"%d",isSaved);}// 读取用户信息- (void)readUserInfo{    // 读取用户名    self.nameTextField.text = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];        // 从钥匙串中读取密码    /*    参数1 : 读取哪个APP的密码    参数2 : 读取哪个APP的哪个账号的密码    */    NSString *decodePsd = [SSKeychain passwordForService:[NSBundle mainBundle].bundleIdentifier account:self.nameTextField.text];        // 读取密码    self.passwordTextField.text = decodePsd;}-(void)touchesBegan:(NSSet*)touches withEvent:(UIEvent *)event

{

[self dismissModalViewControllerAnimated:YES];

}

@end

你可能感兴趣的:(MD5加密详解)