沒有添加GTMBase64的DES加密

最近突然項(xiàng)目突然需要使用DES加密硝训,然后吧响委,又不是+GTMBase64的,網(wǎng)上找了很多的代碼都是DES+GTMBase64的窖梁,而且解密的時候吧赘风,返回是NULL,很是頭大纵刘。找了好久才找到了一段代碼可用邀窃,目前也沒有時間去深入了解,看到網(wǎng)上有很多人都在問這個假哎,所有將其分享一下瞬捕。原文來至https://github.com/SalehAlDhobaie/DES。

使用:

NSString *cont1 = [DEST encryptSting:str1 key:key1 andDesiv:key1];

NSLog(@"加密結(jié)果:%@",cont1);

NSString *cont2 = [DEST decryptWithDESString:str2 key:key2 andiV:key2];

NSLog(@"解密結(jié)果:%@",cont2);

代碼:

*********************************************************************************

#import@interface DEST : NSObject

//DES加密

+(NSString *)encryptSting:(NSString *)sText key:(NSString *)key andDesiv:(NSString *)ivDes;

//DES解密

+(NSString *)decryptWithDESString:(NSString *)sText key:(NSString *)key andiV:(NSString *)iv;

@end

*********************************************************************************

#import "DEST.h"#import@implementation DEST

//DES加密

+(NSString *)encryptSting:(NSString *)sText key:(NSString *)key andDesiv:(NSString *)ivDes

{

if ((sText == nil || sText.length == 0)

|| (sText == nil || sText.length == 0)

|| (ivDes == nil || ivDes.length == 0)) {

return @"";

}

//gb2312 編碼

NSStringEncoding encoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSData* encryptData = [sText dataUsingEncoding:encoding];

size_t? dataInLength = [encryptData length];

const void *? dataIn = (const void *)[encryptData bytes];

//? ? CCCryptorStatus ccStatus = nil;

uint8_t *dataOut = NULL; //可以理解位type/typedef 的縮寫(有效的維護(hù)了代碼舵抹,比如:一個人用int肪虎,一個人用long。最好用typedef來定義)

size_t dataOutMoved = 0;

size_t? ? dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);? dataOut = malloc( dataOutAvailable * sizeof(uint8_t));

memset((void *)dataOut, 0x0, dataOutAvailable);//將已開辟內(nèi)存空間buffer的首 1 個字節(jié)的值設(shè)為值 0

const void *iv = (const void *) [ivDes cStringUsingEncoding:NSASCIIStringEncoding];

//CCCrypt函數(shù) 加密/解密

CCCryptorStatus ccStatus = CCCrypt(kCCEncrypt,//? 加密/解密

kCCAlgorithmDES,//? 加密根據(jù)哪個標(biāo)準(zhǔn)(des惧蛹,3des扇救,aes。香嗓。迅腔。。)

kCCOptionPKCS7Padding,//? 選項(xiàng)分組密碼算法(des:對每塊分組加一次密? 3DES:對每塊分組加三個不同的密)

[key UTF8String],? //密鑰? ? 加密和解密的密鑰必須一致

kCCKeySizeDES,//? DES 密鑰的大锌坑椤(kCCKeySizeDES=8)

iv, //? 可選的初始矢量

dataIn, // 數(shù)據(jù)的存儲單元

dataInLength,// 數(shù)據(jù)的大小

(void *)dataOut,// 用于返回?cái)?shù)據(jù)

dataOutAvailable,

&dataOutMoved);

//編碼 base64

NSData *data = [NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved];

Byte *bytes = (Byte *)[data bytes];

//下面是Byte 轉(zhuǎn)換為16進(jìn)制沧烈。

NSString *hexStr=@"";

for(int i=0;i<[data length];i++){

NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16進(jìn)制數(shù)

if([newHexStr length]==1)

hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];

else

hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];

}

free(dataOut);

return hexStr;

}

//DES解密

+(NSString *)decryptWithDESString:(NSString *)sText key:(NSString *)key andiV:(NSString *)iv

{

if ((sText == nil || sText.length == 0)||

(sText == nil || sText.length == 0)||

(iv == nil || iv.length == 0)) {

return @"";

}

const void *dataIn;

size_t dataInLength;

char *myBuffer = (char *)malloc((int)[sText length] / 2 + 1);

bzero(myBuffer, [sText length] / 2 + 1);

for (int i = 0; i < [sText length] - 1; i += 2) {

unsigned int anInt;

NSString * hexCharStr = [sText substringWithRange:NSMakeRange(i, 2)];

NSScanner * scanner = [[NSScanner alloc] initWithString:hexCharStr];

[scanner scanHexInt:&anInt];

myBuffer[i / 2] = (char)anInt;

}

NSData *decryptData =[NSData dataWithBytes:myBuffer length:[sText length] / 2 ];//轉(zhuǎn)成utf-8并decode

dataInLength = [decryptData length];

dataIn = [decryptData bytes];

free(myBuffer);

CCCryptorStatus ccStatus = nil;

uint8_t *dataOut = NULL; //可以理解位type/typedef 的縮寫(有效的維護(hù)了代碼,比如:一個人用int饱岸,一個人用long掺出。最好用typedef來定義)

size_t dataOutAvailable = 0; //size_t? 是操作符sizeof返回的結(jié)果類型

size_t dataOutMoved = 0;

dataOutAvailable = (dataInLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);

dataOut = malloc( dataOutAvailable * sizeof(uint8_t));

memset((void *)dataOut, 0x0, dataOutAvailable);//將已開辟內(nèi)存空間buffer的首 1 個字節(jié)的值設(shè)為值 0

const void *ivDes = (const void *) [iv cStringUsingEncoding:NSASCIIStringEncoding];

//CCCrypt函數(shù) 加密/解密

ccStatus = CCCrypt(kCCDecrypt,//? 加密/解密

kCCAlgorithmDES,//? 加密根據(jù)哪個標(biāo)準(zhǔn)(des,3des苫费,aes汤锨。。百框。闲礼。)

kCCOptionPKCS7Padding,//? 選項(xiàng)分組密碼算法(des:對每塊分組加一次密? 3DES:對每塊分組加三個不同的密)

[key UTF8String],? //密鑰? ? 加密和解密的密鑰必須一致

kCCKeySizeDES,//? DES 密鑰的大小(kCCKeySizeDES=8)

ivDes, //? 可選的初始矢量

dataIn, // 數(shù)據(jù)的存儲單元

dataInLength,// 數(shù)據(jù)的大小

(void *)dataOut,// 用于返回?cái)?shù)據(jù)

dataOutAvailable,

&dataOutMoved);

NSStringEncoding encoding =CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSString *result? = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)dataOut length:(NSUInteger)dataOutMoved] encoding:encoding];

free(dataOut);

return result;

}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铐维,一起剝皮案震驚了整個濱河市柬泽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫁蛇,老刑警劉巖锨并,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異睬棚,居然都是意外死亡第煮,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門抑党,熙熙樓的掌柜王于貴愁眉苦臉地迎上來包警,“玉大人,你說我怎么就攤上這事底靠『蓿” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵暑中,是天一觀的道長壹瘟。 經(jīng)常有香客問我,道長鳄逾,這世上最難降的妖魔是什么俐筋? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮严衬,結(jié)果婚禮上澄者,老公的妹妹穿的比我還像新娘。我一直安慰自己请琳,他們只是感情好粱挡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著俄精,像睡著了一般询筏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竖慧,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天嫌套,我揣著相機(jī)與錄音逆屡,去河邊找鬼。 笑死踱讨,一個胖子當(dāng)著我的面吹牛魏蔗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播痹筛,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莺治,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帚稠?” 一聲冷哼從身側(cè)響起谣旁,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滋早,沒想到半個月后榄审,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杆麸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年瘟判,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片角溃。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡拷获,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出减细,到底是詐尸還是另有隱情匆瓜,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布未蝌,位于F島的核電站驮吱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏萧吠。R本人自食惡果不足惜左冬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纸型。 院中可真熱鬧拇砰,春花似錦、人聲如沸狰腌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琼腔。三九已至瑰枫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丹莲,已是汗流浹背光坝。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工尸诽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盯另。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓性含,卻偏偏與公主長得像,于是被迫代替她去往敵國和親土铺。 傳聞我的和親對象是個殘疾皇子胶滋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容