好好活著,因為我們會死很久--------- ?海騰
前言:
//加密:通常來講是客戶端對用戶端對用戶的信息進行加密,將加密后的信息發送給服務器.服務器直接把加密后的信息存到數據庫.
//加密是通過各種復雜的算法,把明文(就是我們能看懂的東西)加密為暗文(密文).暗文沒有絕對的安全.算法越復雜越不容易破解.
//加密過得數據,直接存到服務器,每次身份驗證時,都是驗證暗文.只要暗文一致,明文一定一致.世界上只有你自己知道你的密碼.
//如果忘記密碼怎么辦?通常手機或者相關信息驗證.服務器只能重置密碼.BAT(百度,阿貍,騰訊)全都是這樣.
就是在這樣的情況下,所以我們就要對我們自己的APP做一些加密技術.加密的方面主要從下面幾個方面入手,類型 簡介
類型 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?簡介
本地數據加密 ? ? ? ? ? ? ? ? ? ? ? ? ? ?對NSUserDefaults,sqlite存儲文件數據加密,保護帳號和關鍵信息。
URL編碼加密 ? ? ? ? ? ? ? ? ? ? ? ? ? ?對程序中出現的URL進行編碼加密,防止URL被靜態分析
網絡傳輸數據加密 ? ? ? ? ? ? ? ? ? ? ?對客戶端傳輸數據提供加密方案,有效防止通過網絡接口的攔截獲取
方法體,方法名高級混淆 ? ? ? ? ? ?對應用程序的方法名和方法體進行混淆,保證源碼被逆向后無法解析代碼
程序結構混排加密 ? ? ? ? ? ? ? ? ? ? ?對應用程序邏輯結構進行打亂混排,保證源碼可讀性降到最低
MD5加密(單項的只進行加密.)
(ios開發中最常用的一種加密方式,對于MD5加密技術,iOS已經封裝好了一些算法,我們直接調用這些算法就可,當然了,其實現在的開發人員已經不直接使用MD5加密技術,而是在上面直接加一下輔料~,讓密碼更難破解, 我們先看一下簡單的MD5字符串加載吧.)
1. 首先我先給字符串,寫一個延展.方便我們直接條用字符串加密方法(也就是我們自己寫的MD5加密算法)
.h文件(寫一個方法)
#import@interface NSString (MD5)
- (NSString *)stringFromMD5;
@end
.m 文件(注意:我們需要導入的框架)
#import "NSString+MD5.h"#import@implementation NSString (MD5)
#import <CommonCrypto/CommonDigest.h>
- (NSString *)stringFromMD5 {
// 轉成c字符串
const char *string = self.UTF8String;
// 獲取字符串長度
int length = (int)strlen(string);
// 2. 創建字符串數組接收MD5值
// 一個字節是8位,兩個字節是16位,兩個字符可以表示一個16位進制的數,MD5結果為32位,實際上由2個16進制數組成。
unsigned char bytes[CC_MD5_DIGEST_LENGTH];
CC_MD5(string, length, bytes);
// 創建oc可變字符串存儲md5
NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH];
for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x", bytes[count]];
}
return outputString;
}
@end
這樣我們的加密算法加封裝好了,現在我們去調用一下看看
//? ? ? //MD5加密
//? ? NSString *name = @"userName";
//? ? NSString *pass = @"userpass";
//? ? NSString *secName = [[[pass stringFromMD5] stringFromMD5] stringFromMD5];/**< MD5加密 */? /* 我加了三層,可以寫無限層 */
//? ? NSLog(@"sec: %@",secName);/* 轉換為暗文了,打印看看 */
就這樣給服務器嗎?當然不是.貌似這樣加密太簡單了點,我們再來點復雜的.看看最后誰能破譯咱密碼.這樣的話世界上就只有用戶自己知道自己的密碼啦
//手動加密
NSString *pass = @"123654";
NSString *secPass = [pass stringFromMD5];/**< MD5加密 */
NSLog(@"secPass : %@",secPass);
//反相拼接,我把字符串截成兩段,顛倒位置(這樣安全了一些)
NSString *subStr1 = [secPass substringToIndex:10];
NSString *subStr2 = [secPass substringFromIndex:10];
NSString *secSecPass = [NSString stringWithFormat:@"%@%@",subStr2,subStr1];
NSLog(@"%@",secSecPass); //打印看看..
//撒鹽加密(往里面再插些字符串,你去破解吧,累死你.安全多了)
NSMutableString *mStr = [NSMutableString stringWithString:secSecPass];/* 上面那個反相拼接的字符串*/
[mStr insertString:@"11" atIndex:2];
[mStr insertString:@"ht" atIndex:8];
[mStr insertString:@"HAHA" atIndex:10];
NSLog(@"%@",mStr);
//終極撒鹽加密
NSString *newStr = [mStr stringByReplacingOccurrencesOfString:@"11" withString:@"sb"];/* 把@"11"轉化為@"sb" */
NSLog(@"%@",newStr);
這樣就完全OK了,把加密后的信息給服務器.鬼能破解用戶的密碼了.
好了兄弟們,今天就給大家說個MD5吧...還有幾種加密我們未完待續.......