【iOS】MD5加密與網路資料安全

來源:互聯網
上載者:User

在做網路應用程式的時候, 時時刻刻要保證使用者資料的安全, 因此要加密。MD5演算法在國內用的很多. 
MD5演算法的特點:*同樣的資料加密結果是一樣的.(32個字元)*無法復原的.(不能逆向解密)*可用於檔案校正/指紋識別.
MD5演算法是公開的,iOS中已經封裝好了MD5演算法。可以將其寫成字串的分類:

- (NSString *)md5String{const char *string = self.UTF8String;int length = (int)strlen(string);unsigned char bytes[CC_MD5_DIGEST_LENGTH];CC_MD5(string, length, bytes);return [self stringFromBytes:bytes length:CC_MD5_DIGEST_LENGTH];}


在iOS程式中對使用者的登入資料進行加密儲存非常重要。做到,即使資料被劫持,也無法還原出未經處理資料的地步。
一、普通MD5加密
太簡單的MD5加密很容易被破解。一般在進行MD5加密時會使用 “加佐料”的方法。
簡單的MD5可到這個網站進行破解:www.cmd5.com
下面是進行MD5加密的方法: 其中 token即為加的字串,可以為任意長度的奇形怪狀字串。
- (IBAction)login:(UIButton *)sender {[self postLogin];}/**提交使用者資料的時候用post相對安全. 同時將使用者資料轉換成模型最好*/- (void)postLogin {//1.URLNSString *urlStr = [NSString stringWithFormat:@"http://localhost/login.php"];NSURL *url = [NSURL URLWithString:urlStr];//2.建立 MutablerequestNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];//3.設定request.HTTPMethod = @"POST";//請求體可在firebug中找NSString *pwd = self.userPwd.text;//先加鹽, 用MD5加密.  (伺服器簡單儲存加鹽與加密儲存過的就行了).  現實中的情況有公開金鑰/私密金鑰, 伺服器並不是簡單儲存密碼.pwd = [pwd stringByAppendingString:token];pwd = [pwd md5String];NSLog(@"%@", pwd);NSString *body = [NSString stringWithFormat:@"username=%@&password=%@", self.userName.text, pwd];request.HTTPBody = [body dataUsingEncoding:NSUTF8StringEncoding];//4.建立串連. (data即為取到的資料, 和get一樣)[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler: ^(NSURLResponse *response, NSData *data, NSError *connectionError) {    NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];    NSLog(@"%@, %@", [NSThread currentThread], str);    //更新顯示需要在主線程中    [[NSOperationQueue mainQueue] addOperationWithBlock: ^{        self.label.text = str;        NSLog(@"%@, %@", [NSThread currentThread], str);}];}];}

二、更加進階的方法
用公開金鑰和私密金鑰的概念。
一個公開金鑰(都知道),一個私密金鑰(只有伺服器自己知道).密碼要動態變化才行.*使用者:用token+時間進行加密,傳送給伺服器*伺服器:  取出使用者密碼(儲存時用私密金鑰加過密),用時間+公開金鑰等與用戶端發送的密碼進行比較.(伺服器還要檢查發送密碼的時間差,1分鐘以內)
詳細見注釋:摘自老劉。
- (IBAction)login:(id)sender{    NSString *pwd = self.pwdText.text;    // 進行MD5加密    pwd = [pwd stringByAppendingString:token];    // 每次都是一樣的!例如:駭客攔截了路由器中的資料    // 就能夠獲得到加密後的密碼!    pwd = [pwd md5String];        // 在伺服器後台,儲存的是用私人密鑰加鹽處理的MD5密碼串    pwd = [NSString stringWithFormat:@"%@%@%@", pwd, publicKey, @"2014062914:14:30"];    // 利用日期,可以保證加密產生的字串不一樣    pwd = [pwd md5String];        // 提交給伺服器的內容:新的密碼,產生密碼的事件、    /**     伺服器的處理:          1. 從伺服器取出使用者的密碼(是用私人祕密金鑰加密的)     2. 伺服器知道共有密鑰,根據給定的時間(動態產生新的密碼),與用戶端提交的密碼進行比較     3. 伺服器同時需要檢查提交密碼的事件差值,跟用戶端提交的日期偏差在1分鐘之內。     */    NSLog(@"%@", pwd);        [self postLogonWithUserName:self.userNameText.text password:pwd];}#pragma mark - POST登入- (void)postLogonWithUserName:(NSString *)userName password:(NSString *)password{    // 1. url    NSString *urlStr = @"http://192.168.25.2/login.php";    NSURL *url = [NSURL URLWithString:urlStr];        // 2. request,POST方法,需要建立一個可變的請求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];        // 1> POST 方法,所有涉及使用者隱私的資料傳遞,都需要用POST方式提交!    request.HTTPMethod = @"POST";        // 2> 資料體    NSString *bodyStr = [NSString stringWithFormat:@"username=%@&password=%@", userName, password];        // 將字串轉換成位元據    request.HTTPBody = [bodyStr dataUsingEncoding:NSUTF8StringEncoding];        // 3. 發送“非同步”請求,在其他線程工作,不阻塞當前線程程式執行    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        // 1> JSON,格式是和NSDictionary的快速封裝格式非常        // 將JSON轉換成字典 Serialization        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:1 error:NULL];                CZUserInfo *userInfo = [CZUserInfo userInfoWithDict:dict];                NSLog(@"%@ %@", userInfo.userId, userInfo.userName);    }];        NSLog(@"=======");}


轉載請註明出處:http://blog.csdn.net/xn4545945  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.