ios中的MD5加密方式

關(guān)于加密,首先得理解下加密的概念。

明文 :加密前的信息
密文 :加密后的信息
加密算法: 加密或解密的算法
密鑰:算法使用的鑰匙

舉例說明

明文:123456
密文:234567
加密算法:每位加1
加密密鑰:1

本文簡單介紹下經(jīng)典的哈希算法中的一種MD5加密,一般使用的32位加密和16位加密。兩種加密方法本質(zhì)上是沒有區(qū)別的,16位加密是基于32位加密,也就是說從32位加密后的密文中提取16位出來,作為密文。

了解加密算法之前,先認識在計算機中位和字節(jié)和字的概念

1、位(bit)
來自英文bit,音譯為“比特”,表示二進制位。
位是計算機內(nèi)部數(shù)據(jù)儲存的最小單位,11010100是一個8位二進制數(shù)。
一個二進制位只可以表示0和1兩種狀態(tài)(21);
兩個二進制位可以表示00、01、10、11四種(22)狀態(tài);
三位二進制數(shù)可表示八種狀態(tài)(23)……。
2、字節(jié)(byte)
字節(jié)來自英文Byte,音譯為“拜特”,習(xí)慣上用大寫的“B”表示。
字節(jié)是計算機中數(shù)據(jù)處理的基本單位。
計算機中以字節(jié)為單位存儲和解釋信息,規(guī)定一個字節(jié)由八個二進制位構(gòu)成,即1個字節(jié)等于8個比特(1Byte=8bit)。
八位二進制數(shù)最小為00000000,最大為11111111;通常1個字節(jié)可以存入一個ASCII碼,2個字節(jié)可以存放一個漢字國標碼。
3、字
計算機進行數(shù)據(jù)處理時,一次存取、加工和傳送的數(shù)據(jù)長度稱為字(word)。
一個字通常由一個或多個(一般是字節(jié)的整數(shù)位)字節(jié)構(gòu)成。例如286微機的字由2個字節(jié)組成,它的字長為16;486微機的字由4個字節(jié)組成,它的字長為32位機。
計算機的字長決定了其CPU一次操作處理實際位數(shù)的多少,由此可見計算機的字長越大,其性能越優(yōu)越。

接下來簡單看下32位的加密方法在ios中的實現(xiàn)

+ (NSString *)getMd5_32Bit_String:(NSString *)srcString isUppercase:(BOOL)isUppercase{
// 參數(shù) srcString 傳進來的字符串
// 參數(shù) isUppercase 是否需要大小寫
    const char *cStr = [srcString UTF8String];// 先轉(zhuǎn)為UTF_8編碼的字符串
    unsigned char digest[CC_MD5_DIGEST_LENGTH];//設(shè)置一個接受字符數(shù)組
    CC_MD5( cStr, (int)strlen(cStr), digest );// 把str字符串轉(zhuǎn)換成為32位的16進制數(shù)列,存到了result這個空間中
    NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
    for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
    {
        [result appendFormat:@"%02x", digest[i]];//將16字節(jié)的16進制轉(zhuǎn)成32字節(jié)的16進制字符串
    }
//    x表示十六進制,%02X  意思是不足兩位將用0補齊,如果多余兩位則不影響
    if (isUppercase) {
        return   [result uppercaseString];
    }else{
        return result;
    }
    
}

關(guān)于一些重要的方法的詳解
官方的封裝好的MD5加密方法

extern unsigned char *CC_MD5(const void *data, CC_LONG len, unsigned char *md)官方封裝好的加密方法

把str字符串轉(zhuǎn)換成了32位的16進制數(shù)列(這個過程不可逆轉(zhuǎn)) 存儲到了result這個空間中

關(guān)于拼接字符串的占位符使用

x表示十六進制,%02X  意思是不足兩位將用0補齊,如果多余兩位則不影響
NSLog("%02X", 0x888);  //888
NSLog("%02X", 0x4); //04

16位的加密方法在ios中的實現(xiàn)

+ (NSString *)getMd5_16Bit_String:(NSString *)srcString isUppercase:(BOOL)isUppercase{
    //提取32位MD5散列的中間16位
    NSString *md5_32Bit_String=[self getMd5_32Bit_String:srcString isUppercase:NO];
    NSString *result = [[md5_32Bit_String substringToIndex:24] substringFromIndex:8];//即9~25位
    
    if (isUppercase) {
        return   [result uppercaseString];
    }else{
        return result;
    }
    
}

明文加密使用

    NSString*test=@"123";
    NSString*md5_16=[GBEncodeTool getMd5_16Bit_String:test isUppercase:YES];
    NSLog(@"md5_16-->%@",md5_16);
// 打印數(shù)值: md5_16-->AC59075B964B0715
    NSString*md5_32=[GBEncodeTool getMd5_32Bit_String:test isUppercase:YES];
    NSLog(@"md5_32-->%@",md5_32);
// 打印數(shù)值: md5_16-->md5_32-->202CB962AC59075B964B07152D234B70
最后編輯于
?著作權(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)容

  • 一、Base64 原理: base64的編碼都是按字符串長度,以每3個8bit的字符為一組, 然后針對每組,首先獲...
    謝謝生活閱讀 4,947評論 7 33
  • 山來霧北去, 日暖照高晴。 ...
    飄渺孤魂影閱讀 205評論 2 10
  • 最新的提交在 2016/07/14 的時候,c89c25f27d115c1928104b06dbe6eabf005...
    liyb閱讀 616評論 0 0
  • 華燈流金,最是姚江晚。 夏風(fēng)巡江,拂去行人汗。 漁舟對吟,遙聽闌珊處。 一江玉光,牽入詩夢里。 繁華如斯,應(yīng)是好光...
    遠曉閱讀 514評論 1 2
  • 成績-這個詞語在我讀讀初三之前我根本毫不在乎,但是這個之前我毫不在乎的詞語現(xiàn)在卻在我的認知和生活里起了很大的作用。...
    lixiaoshan閱讀 262評論 0 1

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