iOS中MD5加密算法的介紹和使用
前言
軟件開發(fā)過程中,對數(shù)據(jù)進行加密是保證數(shù)據(jù)安全的重要手段,常見的加密有Base64加密和MD5加密。Base64加密是可逆的,MD5加密目前來說一般是不可逆的。
MD5生成的是固定的128bit,即128個0和1的二進制位,而在實際應用開發(fā)中,通常是以16進制輸出的,所以正好就是32位的16進制,說白了也就是32個16進制的數(shù)字。
MD5主要特點是 不可逆,相同數(shù)據(jù)的MD5值肯定一樣,不同數(shù)據(jù)的MD5值不一樣(也不是絕對的,但基本是不能一樣的)。
MD5算法還具有以下性質(zhì):
1、壓縮性:任意長度的數(shù)據(jù),算出的MD5值長度都是固定的。
2、容易計算:從原數(shù)據(jù)計算出MD5值很容易。
3、抗修改性:對原數(shù)據(jù)進行任何改動,哪怕只修改1個字節(jié),所得到的MD5值都有很大區(qū)別。
4、弱抗碰撞:已知原數(shù)據(jù)和其MD5值,想找到一個具有相同MD5值的數(shù)據(jù)(即偽造數(shù)據(jù))是非常困難的。
5、強抗碰撞:想找到兩個不同的數(shù)據(jù),使它們具有相同的MD5值,是非常困難的。
6、MD5加密是不可解密的,但是網(wǎng)上有一些解析MD5的,那個相當于一個大型的數(shù)據(jù)庫,通過匹配MD5去找到原密碼。所以,只要在要加密的字符串前面加上一些字母數(shù)字符號或者多次MD5加密,這樣出來的結果一般是解析不出來的。
MD5的應用:
由于MD5加密算法具有較好的安全性,而且免費,因此該加密算法被廣泛使用
大多數(shù)的登錄功能向后臺提交密碼時都會使用到這種算法
注意點:
(1)一定要和后臺開發(fā)人員約定好,MD5加密的位數(shù)是16位還是32位(大多數(shù)都是32位的),16位的可以通過32位的轉換得到。
(2)MD5加密區(qū)分 大小寫,使用時要和后臺約定好。
MD5解密:
解密網(wǎng)站:http://www.cmd5.com/
為了讓MD5碼更加安全 涌現(xiàn)了很多其他方法 如加鹽。 鹽要足夠長足夠亂 得到的MD5碼就很難查到。
終端代碼:$ echo -n abc|openssl md5 給字符串a(chǎn)bc加密、
蘋果包裝了MD5加密的方法,使用起來十分的方便。
#import@interface MD5Encrypt : NSObject // MD5加密 /* *由于MD5加密是不可逆的,多用來進行驗證 */ // 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{
//要進行UTF8的轉碼
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{
//要進行UTF8的轉碼
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
總結
以上就是iOS中MD5加密算法的介紹和使用,希望能對各位iOS開發(fā)者們能有所幫助,如果有疑問大家可以留言交流。
相關文章
iOS 判斷頁面中的該填項是否填完整,改變按鈕狀態(tài)的方法
下面小編就為大家分享一篇iOS 判斷頁面中的該填項是否填完整,改變按鈕狀態(tài)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Objective-C中block循環(huán)引用問題詳解
這篇文章主要給大家介紹了關于Objective-C中block循環(huán)引用問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Objective-C具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06
舉例講解iOS應用開發(fā)中對設計模式中的策略模式的使用
這篇文章主要介紹了iOS應用設計中對設計模式中的策略模式的使用,示例代碼為傳統(tǒng)的Objective-C語言,需要的朋友可以參考下2016-03-03
iOS MRC 下 block 循環(huán)引用問題實例講解
本文通過文字說明加代碼的形式給大家介紹了iOS MRC 下 block 循環(huán)引用問題,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2017-12-12
淺談iOS開發(fā)如何適配暗黑模式(Dark Mode)
這篇文章主要介紹了淺談iOS開發(fā)如何適配暗黑模式(Dark Mode),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-09-09

