md5加密及登錄網(wǎng)絡(luò)傳輸安全

今天簡單介紹一下md5加密,首先MD5加密有如下幾個特點:

1、同樣的數(shù)據(jù)加密結(jié)果是一樣的.(32個字符)

2、不可逆的.(不能逆向解密)

MD5算法是公開的,iOS中已經(jīng)包裝好了MD5算法。

可以將其寫成字符串的分類:

- (NSString*)md5String

{

? ? ? ? ? ?constcharchar*string?=self.UTF8String;

? ? ? ? ? ?intlength?=?(int)strlen(string);

? ? ? ? ? ?unsignedcharbytes[CC_MD5_DIGEST_LENGTH];

? ? ? ? ? ?CC_MD5(string,?length,?bytes);

? ? ? ? ? ?return[selfstringFromBytes:byteslength:CC_MD5_DIGEST_LENGTH];

}

- (NSString*)md5 {

? ? ?constchar*cStr = [selfUTF8String];

? ? ?unsignedcharresult[CC_MD5_DIGEST_LENGTH];

? ? ?CC_MD5(cStr, (CC_LONG)strlen(cStr), result);

? ? ? ? ? ? ? ? return[[NSStringstringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",

result[0], result[1], result[2], result[3],

result[4], result[5], result[6], result[7],

result[8], result[9], result[10], result[11],

result[12], result[13], result[14], result[15]

]lowercaseString];

}

在程序中對用戶的登錄數(shù)據(jù)進(jìn)行加密存儲非常重要。采用MD5加密后,即使數(shù)據(jù)被劫持,也無法還原出原始數(shù)據(jù)(雖然說現(xiàn)在也有破解MD5的東東,后面還有公私鑰加密解密)。

一、普通MD5加密

太簡單的MD5加密是很容易被破解。一般在進(jìn)行MD5加密時會使用“加鹽”的方法。簡單的MD5可到這個網(wǎng)站進(jìn)行破解:www.cmd5.com

下面是進(jìn)行MD5加密的方法: 其中token即為加鹽的字符串,可以為任意長度的奇形怪狀字符串。

如:

NSString*pwd =self.userPwdLabel.text;

//先加鹽,?用MD5加密.??(服務(wù)器簡單存儲加鹽與加密保存過的就行了).??現(xiàn)實中的情況有公鑰/私鑰,?服務(wù)器并不是簡單存儲密碼.

pwd?=?[pwd stringByAppendingString:token];

pwd?=?[pwd md5String];

NSLog(@"%@",?pwd);

然后 去發(fā)送網(wǎng)絡(luò)請求

二、更加高級的方法

用公鑰和私鑰的概念。

一個公鑰(對外的都知道),一個私鑰(只有服務(wù)器自己知道).密碼要動態(tài)變化才行.

*用戶:用token+時間進(jìn)行加密,傳送給服務(wù)器

*服務(wù)器:取出用戶密碼(存儲時用私鑰加過密),用時間+公鑰等與客戶端發(fā)送的密碼進(jìn)行比較.(服務(wù)器還要檢查發(fā)送密碼的時間差,1分鐘以內(nèi))

如:

第一步:先加鹽 然后md5

NSString *pwd =self.userPwdLabel.text;

//?進(jìn)行MD5加密

pwd?=?[pwd stringByAppendingString:token];

//?每次都是一樣的!例如:黑客攔截了路由器中的數(shù)據(jù)

//?就能夠獲得到加密后的密碼!

pwd?=?[pwd md5String];

第二步:公鑰加密 再M(fèi)D5

//?在服務(wù)器后臺,保存的是用私有密鑰加鹽處理的MD5密碼串

pwd?=?[NSStringstringWithFormat:@"%@%@%@",?pwd,?publicKey,@"2014062914:14:30"];

//?利用日期,可以保證加密生成的字符串不一樣

pwd?=?[pwd md5String];

//?提交給服務(wù)器的內(nèi)容:新的密碼,生成密碼的事件、

/**

服務(wù)器的處理:

1.?從服務(wù)器取出用戶的密碼(是用私有密鑰加密的)

2.?服務(wù)器知道共有密鑰,根據(jù)給定的時間(動態(tài)生成新的密碼),與客戶端提交的密碼進(jìn)行比較

3.?服務(wù)器同時需要檢查提交密碼的事件差值,跟客戶端提交的日期偏差在1分鐘之內(nèi)。

*/

NSLog(@"%@",?pwd);

[selfpostLogonWithUserName:self.userNameText.textpassword:pwd];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容