臥虎藏龍之----iOS那幾種加密解密常用算法

好好活著,因為我們會死很久--------- ?海騰


前言:

//加密:通常來講是客戶端對用戶端對用戶的信息進行加密,將加密后的信息發送給服務器.服務器直接把加密后的信息存到數據庫.

//加密是通過各種復雜的算法,把明文(就是我們能看懂的東西)加密為暗文(密文).暗文沒有絕對的安全.算法越復雜越不容易破解.

//加密過得數據,直接存到服務器,每次身份驗證時,都是驗證暗文.只要暗文一致,明文一定一致.世界上只有你自己知道你的密碼.

//如果忘記密碼怎么辦?通常手機或者相關信息驗證.服務器只能重置密碼.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吧...還有幾種加密我們未完待續.......

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進行加密后保存到用戶偏好設置( [NSUserDefaul...
    彬至睢陽閱讀 3,005評論 0 7
  • 常見的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ D...
    小小啄閱讀 3,176評論 0 9
  • //將NSData轉化為NSString NSString* str = [[NSString alloc] in...
    脫脫夫斯基閱讀 1,163評論 0 52
  • 首先羅列一些知識點: 1.加密算法通常分為對稱性加密算法和非對稱性加密算法:對于對稱性加密算法,信息接收雙方都需事...
    JonesCxy閱讀 1,422評論 2 4
  • 文/進水 美食 , 婚戀 , 倫理 , 批判 , 騙婚 —— 摘出關鍵字,哪個跟哪個都不相干。 文章完結于2017...
    于進水閱讀 472評論 0 2