iOS 3DES加密和解密的一些坑

這個(gè)就是常用的3DES加密烙常,百度有很多,我就直接截圖了

這里說(shuō)一下之前做3DES加密和解密中與后臺(tái)配合的一些坑。

1. 確定好加密的方式是 ECB還是CBC

2.確定好補(bǔ)位方式

這里用的是kCCOptionPKCS7Padding補(bǔ)位方式蚕脏,它的特點(diǎn)就是對(duì)加密的內(nèi)容不滿(mǎn)8位進(jìn)行缺幾位侦副,用所缺位數(shù)進(jìn)行補(bǔ)位。eg:原始數(shù)據(jù)為 FF FF FF FF FF FF FF FF FF FF FF FF FF驼鞭,缺少3位秦驯,所以補(bǔ)位后為FF FF FF FF FF FF FF FF FF FF FF FF FF 03 03 03。但是如果后臺(tái)的補(bǔ)位方式是自己定義的挣棕,那這個(gè)時(shí)候坑就來(lái)了译隘。(1)把kCCOptionPKCS7Padding補(bǔ)位方式去掉!(2)對(duì)數(shù)據(jù)進(jìn)行判斷洛心,然后自行補(bǔ)位

這里我隨便寫(xiě)了一個(gè)自定義的補(bǔ)位:不滿(mǎn)8位固耘,第一位補(bǔ)0x60,其余補(bǔ)0x00

3.確定好密鑰轉(zhuǎn)NSData的方式

這塊我就碰到了坑,后臺(tái)給的是一個(gè)十六進(jìn)制的字符串词身,它是直接用的這個(gè)16進(jìn)制厅目。而我按照百度直接拿這個(gè)字符傳進(jìn)行了utf8轉(zhuǎn)成data,結(jié)果悲劇了法严。所以問(wèn)清楚后臺(tái)給你的密鑰應(yīng)該怎樣轉(zhuǎn)化為data损敷。


最后粘一下我加解密中用到的一些方法

//int 轉(zhuǎn) data

+ (NSData*)little_intToByteWithData:(int)i andLength:(int)len{

Byte abyte[len];

if(len ==1) {

abyte[0] = (Byte) (0xff& i);

}else if(len ==2) {

abyte[1] = (Byte) (0xff& i);

abyte[0] = (Byte) ((0xff00& i) >>8);

}else{

abyte[3] = (Byte) (0xff& i);

abyte[2] = (Byte) ((0xff00& i) >>8);

abyte[1] = (Byte) ((0xff0000& i) >>16);

abyte[0] = (Byte) ((0xff000000& i) >>24);

}

NSData*adata = [NSData dataWithBytes:abytelength:len];

return adata;

}

//取反

+(NSData*)getFanByte:(NSData*)data{

NSInteger length = data.length;

Byte res[length];

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

for(int i =0; i

res[i] = ~(src[i]);

}

NSData*resultData = [NSData dataWithBytes:res length:length];

return resultData;

}

//16進(jìn)制字符串轉(zhuǎn)data

+ (NSData*)convertHexStrToData:(NSString*)str {

if(!str || [strlength] ==0) {

return nil;

}

NSMutableData*hexData = [[NSMutableData alloc]initWithCapacity:8];

NSRange range;

if([strlength] %2==0) {

range =NSMakeRange(0,2);

}else{

range =NSMakeRange(0,1);

}

for(NSIntegeri = range.location; i < [strlength]; i +=2) {

unsigned int anInt;

NSString*hexCharStr = [str substringWithRange:range];

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

[scanner scanHexInt:&anInt];

NSData*entity = [[NSData alloc]initWithBytes:&anIntlength:1];

[hexData appendData:entity];

range.location+= range.length;

range.length=2;

}

return hexData;

}

//data轉(zhuǎn)16進(jìn)制字符串

+ (NSString*)convertDataToHexStr:(NSData*)data {

if(!data || [data length] ==0) {

return@"";

}

NSMutableString*string = [[NSMutableString alloc]initWithCapacity:[data length]];

[data enumerateByteRangesUsingBlock:^(constvoid*bytes,NSRange byteRange,BOOL*stop) {

unsigned char*dataBytes = (unsigned char*)bytes;

for(NSIntegeri =0; i < byteRange.length; i++) {

NSString*hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) &0xff];

if([hexStr length] ==2) {

[string appendString:hexStr];

}else{

[string appendFormat:@"0%@", hexStr];

}

}

}];

return string;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市深啤,隨后出現(xiàn)的幾起案子拗馒,更是在濱河造成了極大的恐慌,老刑警劉巖溯街,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诱桂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苫幢,警方通過(guò)查閱死者的電腦和手機(jī)访诱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)韩肝,“玉大人触菜,你說(shuō)我怎么就攤上這事“Ь” “怎么了涡相?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)剩蟀。 經(jīng)常有香客問(wèn)我催蝗,道長(zhǎng),這世上最難降的妖魔是什么育特? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任丙号,我火速辦了婚禮先朦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘犬缨。我一直安慰自己喳魏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布怀薛。 她就那樣靜靜地躺著刺彩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪枝恋。 梳的紋絲不亂的頭發(fā)上创倔,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音焚碌,去河邊找鬼畦攘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呐能,可吹牛的內(nèi)容都是我干的念搬。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼摆出,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼朗徊!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起偎漫,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤爷恳,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后象踊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體温亲,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年杯矩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栈虚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡史隆,死狀恐怖魂务,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泌射,我是刑警寧澤粘姜,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站熔酷,受9級(jí)特大地震影響孤紧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拒秘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一号显、第九天 我趴在偏房一處隱蔽的房頂上張望臭猜。 院中可真熱鬧,春花似錦押蚤、人聲如沸获讳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至量愧,卻和暖如春钾菊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偎肃。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工煞烫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人累颂。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓滞详,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親紊馏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子料饥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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