iOS中MD5加密算法的介紹和使用
前言
軟件開發(fā)過(guò)程中,對(duì)數(shù)據(jù)進(jìn)行加密是保證數(shù)據(jù)安全的重要手段,常見(jiàn)的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前來(lái)說(shuō)一般是不可逆的。
MD5生成的是固定的128bit,即128個(gè)0和1的二進(jìn)制位,而在實(shí)際應(yīng)用開發(fā)中,通常是以16進(jìn)制輸出的,所以正好就是32位的16進(jìn)制,說(shuō)白了也就是32個(gè)16進(jìn)制的數(shù)字。
MD5主要特點(diǎn)是 不可逆,相同數(shù)據(jù)的MD5值肯定一樣,不同數(shù)據(jù)的MD5值不一樣(也不是絕對(duì)的,但基本是不能一樣的)。
MD5算法還具有以下性質(zhì):
1、壓縮性:任意長(zhǎng)度的數(shù)據(jù),算出的MD5值長(zhǎng)度都是固定的。
2、容易計(jì)算:從原數(shù)據(jù)計(jì)算出MD5值很容易。
3、抗修改性:對(duì)原數(shù)據(jù)進(jìn)行任何改動(dòng),哪怕只修改1個(gè)字節(jié),所得到的MD5值都有很大區(qū)別。
4、弱抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個(gè)具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
5、強(qiáng)抗碰撞:想找到兩個(gè)不同的數(shù)據(jù),使它們具有相同的MD5值,是非常困難的。
6、MD5加密是不可解密的,但是網(wǎng)上有一些解析MD5的,那個(gè)相當(dāng)于一個(gè)大型的數(shù)據(jù)庫(kù),通過(guò)匹配MD5去找到原密碼。所以,只要在要加密的字符串前面加上一些字母數(shù)字符號(hào)或者多次MD5加密,這樣出來(lái)的結(jié)果一般是解析不出來(lái)的。
MD5的應(yīng)用:
由于MD5加密算法具有較好的安全性,而且免費(fèi),因此該加密算法被廣泛使用
大多數(shù)的登錄功能向后臺(tái)提交密碼時(shí)都會(huì)使用到這種算法
注意點(diǎn):
(1)一定要和后臺(tái)開發(fā)人員約定好,MD5加密的位數(shù)是16位還是32位(大多數(shù)都是32位的),16位的可以通過(guò)32位的轉(zhuǎn)換得到。
(2)MD5加密區(qū)分 大小寫,使用時(shí)要和后臺(tái)約定好。
MD5解密:
解密網(wǎng)站:http://www.cmd5.com/
為了讓MD5碼更加安全 涌現(xiàn)了很多其他方法 如加鹽。 鹽要足夠長(zhǎng)足夠亂 得到的MD5碼就很難查到。
終端代碼:$ echo -n abc|openssl md5 給字符串a(chǎn)bc加密、
蘋果包裝了MD5加密的方法,使用起來(lái)十分的方便。
#import@interface MD5Encrypt : NSObject // MD5加密 /* *由于MD5加密是不可逆的,多用來(lái)進(jìn)行驗(yàn)證 */ // 32位小寫 +(NSString *)MD5ForLower32Bate:(NSString *)str; // 32位大寫 +(NSString *)MD5ForUpper32Bate:(NSString *)str; // 16為大寫 +(NSString *)MD5ForUpper16Bate:(NSString *)str; // 16位小寫 +(NSString *)MD5ForLower16Bate:(NSString *)str; @end
#import "MD5Encrypt.h" #import <CommonCrypto/CommonDigest.h> @implementation MD5Encrypt #pragma mark - 32位 小寫 +(NSString *)MD5ForLower32Bate:(NSString *)str{ //要進(jìn)行UTF8的轉(zhuǎn)碼 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02x", result[i]]; } return digest; } #pragma mark - 32位 大寫 +(NSString *)MD5ForUpper32Bate:(NSString *)str{ //要進(jìn)行UTF8的轉(zhuǎn)碼 const char* input = [str UTF8String]; unsigned char result[CC_MD5_DIGEST_LENGTH]; CC_MD5(input, (CC_LONG)strlen(input), result); NSMutableString *digest = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2]; for (NSInteger i = 0; i < CC_MD5_DIGEST_LENGTH; i++) { [digest appendFormat:@"%02X", result[i]]; } return digest; } #pragma mark - 16位 大寫 +(NSString *)MD5ForUpper16Bate:(NSString *)str{ NSString *md5Str = [self MD5ForUpper32Bate:str]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string; } #pragma mark - 16位 小寫 +(NSString *)MD5ForLower16Bate:(NSString *)str{ NSString *md5Str = [self MD5ForLower32Bate:str]; NSString *string; for (int i=0; i<24; i++) { string=[md5Str substringWithRange:NSMakeRange(8, 16)]; } return string; } @end
總結(jié)
以上就是iOS中MD5加密算法的介紹和使用,希望能對(duì)各位iOS開發(fā)者們能有所幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
IOS開發(fā)之適配iOS10及Xcode8的注意點(diǎn)
這篇文章主要介紹了IOS開發(fā)之適配iOS10及Xcode8的注意點(diǎn),本文給大家介紹了可能出現(xiàn)的問(wèn)題及相應(yīng)的解決方法,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看2016-10-10iOS App開發(fā)中擴(kuò)展RCLabel組件進(jìn)行基于HTML的文本布局
RCLabel組件基于CoreText框架,可以將HTML標(biāo)記的文本內(nèi)容轉(zhuǎn)為富文本視圖,這里我們就來(lái)解讀如何在iOS App開發(fā)中擴(kuò)展RCLabel組件進(jìn)行基于HTML的文本布局:2016-07-07怎么防止ios系統(tǒng)被抓包?防止ios系統(tǒng)被抓包的方法
怎么防止ios系統(tǒng)被抓包?下面小編就為大家分享一篇防止ios系統(tǒng)被抓包的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12iOS 獲取公歷、農(nóng)歷日期的年月日的實(shí)例代碼
本篇文章主要介紹了iOS 獲取公歷、農(nóng)歷日期的年月日的實(shí)例代碼,主要介紹了三種方法,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02iOS 簡(jiǎn)單的操作桿旋轉(zhuǎn)實(shí)現(xiàn)示例詳解
這篇文章主要為大家介紹了iOS 簡(jiǎn)單的操作桿旋轉(zhuǎn)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12iOS App開發(fā)中UIViewController類的使用教程
UIViewController是iOS中控制視圖的關(guān)鍵所在,這里我們將針對(duì)UIViewController的聲明周期與主要屬性和方法,來(lái)總結(jié)iOS App開發(fā)中UIViewController類的使用教程2016-07-07