iOS MD5和base64加密

MD5和base64加密

在網絡發展趨勢日漸迅猛的今天,數據的安全性也越來越重要。因此,如何保證用戶數據的安全就成為了我們不得不考慮的一個問題。在iOS中最常見的兩種加密方式是base64加密碼和MD5加密。base64加密屬于可逆性的加密,意思就是既可以加密,也可以解密。而MD5加密屬于不可逆性的加密,只能夠給我們提供加密的方式,卻沒有解密的方式,一般情況多應用與登錄注冊界面。

MD5加密

MD5簡介

MD5是利用哈希算法來加密的。哈希算法是一種摘要算法,從嚴格意義上來講它不屬于加密算法(因為它沒有解密的過程),MD5有以下兩個最主要的特性。

  • 加密的不可逆性,只能夠加密,不能夠解密。
  • 任意長度的明文經過加密后長度都是固定的,長度為16進制32位。

它還有以下幾種特點

  • 容易計算:根據原數據計算出MD5很容易
  • 抗修改性:MD5對原數據十分的敏感,哪怕只修改了一個字節,得到的MD5的值與之前的MD5數值都有很大的差別。
  • 防偽性能高:已知原數據和它的MD5值,想要找到相同MD5值得數據是非常困難的,可以說幾乎是不可能的。

準備工作

在我們正式使用MD5之前我們還需要做一些準備工作,首先我們需要引入<CommonCrypto/CommonCrypto.h>這個頭文件。

示例代碼

在這里我們將MD5加密封裝在一個類中,以便于我們日后使用起來更加的方便。這里我們提供了兩個類方法,分別對NSString和NSData進行加密,聲明成類方法是為了調用的時候方便。

MySecurities.h 文件
#import <Foundation/Foundation.h>
@interface MySecurities : NSObject
+(NSString *)md5String:(NSString *)sourceString;//md5字符串加密
+(NSString *)md5Data:(NSData *)sourceData;//md5data加密
@end
MySecurities.h 文件 
@implementation MySecurities
+(NSString *)md5String:(NSString *)sourceString{
if(!sourceString){
return nil;//判斷sourceString如果為空則直接返回nil。
}
//MD5加密都是通過C級別的函數來計算,所以需要將加密的字符串轉換為C語言的字符串
 const char *cString = sourceString.UTF8String;
//創建一個C語言的字符數組,用來接收加密結束之后的字符
 unsigned char result[CC_MD5_DIGEST_LENGTH];
//MD5計算(也就是加密)
//第一個參數:需要加密的字符串
//第二個參數:需要加密的字符串的長度
//第三個參數:加密完成之后的字符串存儲的地方
  CC_MD5(cString, (CC_LONG)strlen(cString), result);
//將加密完成的字符拼接起來使用(16進制的)。
//聲明一個可變字符串類型,用來拼接轉換好的字符
 NSMutableString *resultString = [[NSMutableString alloc]init];
//遍歷所有的result數組,取出所有的字符來拼接
    for (int i = 0;i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultString  appendFormat:@"%02x",result[i]];
//%02x:x 表示以十六進制形式輸出,02 表示不足兩位,前面補0輸出;超出兩位,不影響。當x小寫的時候,返回的密文中的字母就是小寫的,當X大寫的時候返回的密文中的字母是大寫的。
    }
//打印最終需要的字符
    NSLog(@"resultString === %@",resultString);
    return resultString;
}
@end
MySecurities.h 文件 
@implementation MySecurities
+(NSString *)md5Data:(NSData *)sourceData{
    if (!sourceData) {
        return nil;//判斷sourceString如果為空則直接返回nil。
    }
//需要MD5變量并且初始化
    CC_MD5_CTX  md5;
    CC_MD5_Init(&md5);
//開始加密(第一個參數:對md5變量去地址,要為該變量指向的內存空間計算好數據,第二個參數:需要計算的源數據,第三個參數:源數據的長度)
    CC_MD5_Update(&md5, sourceData.bytes, (CC_LONG)sourceData.length);
//聲明一個無符號的字符數組,用來盛放轉換好的數據
    unsigned char result[CC_MD5_DIGEST_LENGTH];
//將數據放入result數組
    CC_MD5_Final(result, &md5);
//將result中的字符拼接為OC語言中的字符串,以便我們使用。
    NSMutableString *resultString = [NSMutableString string];
    for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
        [resultString appendFormat:@"%02X",result[i]];
    }
    NSLog(@"resultString=========%@",resultString);
    return  resultString;
@end

base64加密

base64簡介

Base64編碼可用于在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

示例代碼

和MD5一樣我們采取封裝的辦法將base64封裝進了MySecurities這個類中,我們也提供了兩種加密的方式

MySecurities.h 文件
#import <Foundation/Foundation.h>
@interface MySecurities : NSObject
+(NSString *)base64EncodingWithData:(NSData *)sourceData;//base64加密
+(id)base64EncodingWithString:(NSString *)sourceString;//base64解密
@end

base64加密

 MySecurities.m 文件
@implementation MySecurities
+(NSString *)base64EncodingWithData:(NSData *)sourceData{
    if (!sourceData) {//如果sourceData則返回nil,不進行加密。
        return nil;
    }
    NSString *resultString = [sourceData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return resultString;
}
@end

base64解密

 MySecurities.m 文件
@implementation MySecurities
+(id)base64EncodingWithString:(NSString *)sourceString{
    if (!sourceString) {
        return nil;//如果sourceString則返回nil,不進行解密。
    }
    NSData *resultData = [[NSData alloc]initWithBase64EncodedString:sourceString options:NSDataBase64DecodingIgnoreUnknownCharacters];
    return resultData;
}
@end

這是我個人對著兩種加密方式的一個理解,如有不同意見,或者更好的,歡迎指正。

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

推薦閱讀更多精彩內容

  • MD5加密 簡介 它是用哈希算法加密的。哈希算法是一種摘要算法(是一種能產生特殊輸出格式的算法,這種算法的特點是:...
    YANG1220閱讀 3,988評論 0 9
  • 前言:之前也寫過一篇一樣的文章,但是那時候的排版有問題,太丑了,又使用 MarkDown的語法重新排了一下版 MD...
    YANG1220閱讀 620評論 0 4
  • /**ios常見的幾種加密方法: 普通的加密方法是講密碼進行加密后保存到用戶偏好設置( [NSUserDefaul...
    彬至睢陽閱讀 3,015評論 0 7
  • 常見的加密算法 MD5 \ SHA \ DES \ 3DES \ RC2和RC4 \ RSA \ IDEA \ D...
    小小啄閱讀 3,176評論 0 9
  • 首先羅列一些知識點: 1.加密算法通常分為對稱性加密算法和非對稱性加密算法:對于對稱性加密算法,信息接收雙方都需事...
    JonesCxy閱讀 1,438評論 2 4