iOS開發(fā)-Objective-c的AES加密和解密算法的實(shí)現(xiàn)

話不多說济欢,直接上代碼

.h

import?

@interface?LanAES :?NSObject

+(NSData?*)AES256ParmEncryptWithKey:(NSString?*)key Encrypttext:(NSData?*)text;?//加密

+(NSData?*)AES256ParmDecryptWithKey:(NSString?*)key Decrypttext:(NSData?*)text;?//解密

+(NSString?*) aes256_encrypt:(NSString?*)key Encrypttext:(NSString?*)text;

+(NSString?*) aes256_decrypt:(NSString?*)key Decrypttext:(NSString?*)text;

@end

.m

#import?"LanAES.h"

#import?

@implementation?LanAES

+(NSData?*)AES256ParmEncryptWithKey:(NSString?*)key Encrypttext:(NSData?*)text?//加密

{

?char?keyPtr[kCCKeySizeAES256+1];

?bzero(keyPtr,?sizeof(keyPtr));

[key?getCString:keyPtr?maxLength:sizeof(keyPtr)?encoding:NSUTF8StringEncoding];

?NSUInteger?dataLength = [text?length];

?size_t?bufferSize = dataLength +?kCCBlockSizeAES128;

?void?*buffer =?malloc(bufferSize);

?size_t?numBytesEncrypted =?0;

?CCCryptorStatus?cryptStatus =?CCCrypt(kCCEncrypt,?kCCAlgorithmAES128,

?kCCOptionPKCS7Padding?|?kCCOptionECBMode,

keyPtr,?kCCBlockSizeAES128,

?NULL,

[text?bytes], dataLength,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer, bufferSize,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &numBytesEncrypted);

?if?(cryptStatus ==?kCCSuccess) {

?return?[NSData?dataWithBytesNoCopy:buffer?length:numBytesEncrypted];

? ? }

?free(buffer);

?return?nil;

}

+ (NSData?*)AES256ParmDecryptWithKey:(NSString?*)key Decrypttext:(NSData?*)text?//解密

{

?char?keyPtr[kCCKeySizeAES256+1];

?bzero(keyPtr,?sizeof(keyPtr));

[key?getCString:keyPtr?maxLength:sizeof(keyPtr)?encoding:NSUTF8StringEncoding];

?NSUInteger?dataLength = [text?length];

?size_t?bufferSize = dataLength +?kCCBlockSizeAES128;

?void?*buffer =?malloc(bufferSize);

?size_t?numBytesDecrypted =?0;

?CCCryptorStatus?cryptStatus =?CCCrypt(kCCDecrypt,?kCCAlgorithmAES128,

?kCCOptionPKCS7Padding?|?kCCOptionECBMode,

keyPtr,?kCCBlockSizeAES128,

?NULL,

[text?bytes], dataLength,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? buffer, bufferSize,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? &numBytesDecrypted);

?if?(cryptStatus ==?kCCSuccess) {

?return?[NSData?dataWithBytesNoCopy:buffer?length:numBytesDecrypted];

? ? }

?free(buffer);

?return?nil;

}

+(NSString?*) aes256_encrypt:(NSString?*)key Encrypttext:(NSString?*)text

{

?const?char?*cstr = [text?cStringUsingEncoding:NSUTF8StringEncoding];

?NSData?*data = [NSData?dataWithBytes:cstr?length:text.length];

?//對(duì)數(shù)據(jù)進(jìn)行加密

?NSData?*result = [LanAES?AES256ParmEncryptWithKey:key?Encrypttext:data];


?//轉(zhuǎn)換為2進(jìn)制字符串

?if?(result && result.length?>?0) {


?Byte?*datas = (Byte*)[result?bytes];

?NSMutableString?*output = [NSMutableString?stringWithCapacity:result.length?*?2];

?for(int?i =?0; i < result.length; i++){

[output?appendFormat:@"%02x", datas[i]];

? ? ? ? }

?return?output;

? ? }

?return?nil;

}

+(NSString?*) aes256_decrypt:(NSString?*)key Decrypttext:(NSString?*)text

{

?//轉(zhuǎn)換為2進(jìn)制Data

?NSMutableData?*data = [NSMutableData?dataWithCapacity:text.length?/?2];

?unsigned?char?whole_byte;

?char?byte_chars[3] = {'\0','\0','\0'};

?int?i;

?for?(i=0; i < [text?length] /?2; i++) {

byte_chars[0] = [text?characterAtIndex:i*2];

byte_chars[1] = [text?characterAtIndex:i*2+1];

whole_byte =?strtol(byte_chars,?NULL,?16);

[data?appendBytes:&whole_byte?length:1];

? ? }


?//對(duì)數(shù)據(jù)進(jìn)行解密

?NSData* result = [LanAES?AES256ParmDecryptWithKey:key?Decrypttext:data];

?if?(result && result.length?>?0) {

?return?[[NSString?alloc]?initWithData:result?encoding:NSUTF8StringEncoding];

? ? }

?return?nil;

}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末焦读,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌幕帆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異各薇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)君躺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門峭判,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棕叫,你說我怎么就攤上這事林螃。” “怎么了俺泣?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵疗认,是天一觀的道長。 經(jīng)常有香客問我伏钠,道長横漏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任熟掂,我火速辦了婚禮缎浇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘打掘。我一直安慰自己华畏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布尊蚁。 她就那樣靜靜地躺著亡笑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪横朋。 梳的紋絲不亂的頭發(fā)上仑乌,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼晰甚。 笑死衙传,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厕九。 我是一名探鬼主播蓖捶,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼扁远!你這毒婦竟也來了俊鱼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤畅买,失蹤者是張志新(化名)和其女友劉穎并闲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谷羞,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡帝火,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湃缎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犀填。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖雁歌,靈堂內(nèi)的尸體忽然破棺而出宏浩,到底是詐尸還是另有隱情,我是刑警寧澤靠瞎,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站求妹,受9級(jí)特大地震影響乏盐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜制恍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一父能、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧净神,春花似錦何吝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至坡慌,卻和暖如春黔酥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工跪者, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棵帽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓渣玲,卻偏偏與公主長得像逗概,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忘衍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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