百度百科 MD5加密
MD5使用場(chǎng)景 1.登錄注冊(cè) 2.簽名sign
MD5加密是不可逆的
- 首先需要導(dǎo)入頭文件
#import <Foundation/Foundation.h> - 對(duì)
Data
類(lèi)型數(shù)據(jù)的加密算法
//1.需要MD5變量并且初始化
CC_MD5_CTX md5;
CC_MD5_Init(&md5);
//2.開(kāi)始加密
//第一個(gè)參數(shù):對(duì)MD5變量取地址(要為該變量指向的內(nèi)存空間存儲(chǔ)計(jì)算好的數(shù)據(jù))
//第二個(gè)參數(shù):需要計(jì)算的源數(shù)據(jù)
//第三個(gè)參數(shù):數(shù)據(jù)的長(zhǎng)度 需要轉(zhuǎn)化為CC_LONG類(lèi)型(32位整形)
CC_MD5_Update(&md5, sourceData.bytes,(CC_LONG)sourceData.length);//sourceData為需要加密的data數(shù)據(jù)
//3.聲明一個(gè)無(wú)符號(hào)的字符數(shù)組用來(lái)盛放轉(zhuǎn)換好的數(shù)據(jù)
unsigned char result[CC_MD5_DIGEST_LENGTH];
//4.將數(shù)據(jù)放入數(shù)組
CC_MD5_Final(result, &md5);
//5.將result中的字符拼接為OC語(yǔ)言中的字符串背率,以便使用
NSMutableString *resultStr = [[NSMutableString alloc] init];
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[resultStr appendFormat:@"%02X",result[i]];
}
//resultStr為加密后得到的字符串
- 對(duì)
string
類(lèi)型的數(shù)據(jù)的加密算法
//1.由于MD5加密都是通過(guò)C級(jí)別的函數(shù)來(lái)計(jì)算,所以要將加密的字符串轉(zhuǎn)化的C語(yǔ)言字符串.
const char * cStr = sourceString.UTF8String;
//2.創(chuàng)建一個(gè)C語(yǔ)言字符數(shù)組用來(lái)接收加密之后的字符
unsigned char result[CC_MD5_DIGEST_LENGTH];
//3.MD5計(jì)算(加密)
//第一個(gè)參數(shù):需要加密的字符串
//第二個(gè)參數(shù):需要加密的字符串的長(zhǎng)度 需要轉(zhuǎn)化為CC_LONG類(lèi)型(32位整形)
//第三個(gè)參數(shù):加密完成后的字符串存儲(chǔ)的地方
CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
//4.將加密完成的字符拼接起來(lái)使用(16進(jìn)制)
//聲明一個(gè)可變類(lèi)型 用來(lái)拼接轉(zhuǎn)換好的字符
NSMutableString *resultStr = [[NSMutableString alloc] init];
//遍歷result數(shù)組鄙皇,取出所有的字符來(lái)拼接
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[resultStr appendFormat:@"%02x",result[i]];
}
//resultStr為加密后得到的字符串
//如何讓MD5更安全
//1.加鹽
//2.先加密 在打亂順序