亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

一行代碼實現IOS 3DES加密解密

2020-07-26 03:31:08
字體:
來源:轉載
供稿:網友

3DES(或稱為Triple DES)是三重數據加密算法(TDEA,Triple Data Encryption Algorithm)塊密碼的通稱。它相當于是對每個數據塊應用三次DES加密算法。由于計算機運算能力的增強,原版DES密碼的密鑰長度變得容易被暴力破解;3DES即是設計用來提供一種相對簡單的方法,即通過增加DES的密鑰長度來避免類似的攻擊,而不是設計一種全新的塊密碼算法。 

3DES又稱Triple DES,是DES加密算法的一種模式,它使用3條56位的密鑰對數據進行三次加密。數據加密標準(DES)是美國的一種由來已久的加密標準,它使用對稱密鑰加密法,并于1981年被ANSI組織規范為ANSI X.3.92。DES使用56位密鑰和密碼塊的方法,而在密碼塊的方法中,文本被分成64位大小的文本塊然后再進行加密。比起最初的DES,3DES更為安全。

一行代碼實現3DES加密解密需要用到寫的 JKEncrypt  https://github.com/jukai9316/JKEncrypt。

下面先解析以下3DES的實現,然后再說,如何使用JKEncrypt。

注意點:填充方式不一樣

在與后臺交互的過程中,由于java 里面用的是PKCS5Padding,而iOS只有kCCOptionPKCS7Padding,所以用kCCOptionPKCS7Padding | kCCOptionECBMode 相當于PKCS5Padding。

 以下是3DES 256 在iOS開發中的實現:

#import <CommonCrypto/CommonDigest.h> #import <CommonCrypto/CommonCryptor.h>#import <Security/Security.h>#import "GTMBase64.h" //密匙 key#define gkey      @"Kyle_Chu"http://偏移量#define gIv       @"jukai" //字符串加密-(NSString *)doEncryptStr:(NSString *)originalStr{  //把string 轉NSData  NSData* data = [originalStr dataUsingEncoding:NSUTF8StringEncoding];  //length  size_t plainTextBufferSize = [data length];  const void *vplainText = (const void *)[data bytes];  CCCryptorStatus ccStatus;  uint8_t *bufferPtr = NULL;  size_t bufferPtrSize = 0;  size_t movedBytes = 0;  bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);  bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));  memset((void *)bufferPtr, 0x0, bufferPtrSize);  const void *vkey = (const void *) [gkey UTF8String];  //偏移量  const void *vinitVec = (const void *) [gIv UTF8String];  //配置CCCrypt  ccStatus = CCCrypt(kCCEncrypt,            kCCAlgorithm3DES, //3DES            kCCOptionECBMode|kCCOptionPKCS7Padding, //設置模式            vkey,  //key            kCCKeySize3DES,            vinitVec,   //偏移量,這里不用,設置為nil;不用的話,必須為nil,不可以為@“”            vplainText,            plainTextBufferSize,            (void *)bufferPtr,            bufferPtrSize,            &movedBytes);  NSData *myData = [NSData dataWithBytes:(const void *)bufferPtr length:(NSUInteger)movedBytes];  NSString *result = [GTMBase64 stringByEncodingData:myData];  return result;} //字符串解密-(NSString*)doDecEncryptStr:(NSString *)encryptStr{  NSData *encryptData = [GTMBase64 decodeData:[encryptStr dataUsingEncoding:NSUTF8StringEncoding]];  size_t plainTextBufferSize = [encryptData length];  const void *vplainText = [encryptData bytes];  CCCryptorStatus ccStatus;  uint8_t *bufferPtr = NULL;  size_t bufferPtrSize = 0;  size_t movedBytes = 0;  bufferPtrSize = (plainTextBufferSize + kCCBlockSize3DES) & ~(kCCBlockSize3DES - 1);  bufferPtr = malloc( bufferPtrSize * sizeof(uint8_t));  memset((void *)bufferPtr, 0x0, bufferPtrSize);  const void *vkey = (const void *) [gkey UTF8String];  const void *vinitVec = (const void *) [gIv UTF8String];  ccStatus = CCCrypt(kCCDecrypt,            kCCAlgorithm3DES,            kCCOptionPKCS7Padding|kCCOptionECBMode,            vkey,            kCCKeySize3DES,            vinitVec,            vplainText,            plainTextBufferSize,            (void *)bufferPtr,            bufferPtrSize,            &movedBytes);  NSString *result = [[NSString alloc] initWithData:[NSData dataWithBytes:(const void *)bufferPtr                                   length:(NSUInteger)movedBytes] encoding:NSUTF8StringEncoding];  return result;} 

十六進制的實現省略了,可以閱讀JKEncrypt.m

JKEncrypt的使用:

//1、設置您需要的密匙、偏移量//密匙 key#define gkey      @"Kyle_Chu"http://偏移量#define gIv       @"jukai" // @"kyle_jukai" 是測試字符串,換成您需要加密的內容即可JKEncrypt * en = [[JKEncrypt alloc]init];//加密NSString * encryptStr = [en doEncryptStr: @"kyle_jukai"];NSString * encryptHex = [en doEncryptHex: @"kyle_jukai"];NSLog(@"字符串加密:%@",encryptStr);NSLog(@"十六進制加密:%@",encryptHex);//解密NSString *decEncryptStr = [en doDecEncryptStr:encryptStr];NSString *decEncryptHex = [en doEncryptHex:encryptHex];NSLog(@"字符串解密:%@",decEncryptStr);NSLog(@"字符串解密:%@",decEncryptHex); 

ps:iOS DES加密與3DES加密

最近項目中遇到了加解密的問題,然后翻閱了相關資料,成功搞定。 現在將這些知識點總結一下,一是為了以后復習,二是為了給大家提供參考。

1.  先來說說DES操作,定義我這里就不敘述了,網上一堆一堆的。接下來說一下使用時應該注意的幾點。 首先,大家要分清Key(密鑰),Data(待操作數據)跟Mode(加密模式)。其中Key必須為8字節(64位),Data需要是8字節(64位)的倍數,這里需要注意了,如果Data不是8字節的倍數,那么我們需要進行數據填充,數據填充使用的算法不一定相同。Mode貌似有許多種,這里只簡單的說一下ECB跟CBC模式。

ECB模式:將待處理的數據分成若干塊,每塊的長度都為8字節(64位),與Key長度相同。然后對每塊進行加密或解密,最后將他們連接在一起便是最終的結果。每一塊的數據互不干擾。

CBC模式:也需要將待處理的數據分塊,但是每一塊數據在加密或者解密之前都要與前一塊的結果做一次異或操作,因此該模式需要定義一個特殊的8字節Key,用于和第一塊數據做異或操作。這個特殊的Key就是通常說的初始化向量。在代碼中書寫時需要配置iv參數,注意iv參數是對應CBC模式的。這樣一來,每一塊數據都是有聯系的,這是與ECB模式不同的一點。

2. 再來說說3DES操作,也就是進行3次DES操作。設Ek()和Dk()分別代表DES算法的加密和解密過程,k代表DES算法使用的密鑰,P代表明文,C代表密文,則3DES算法的過程可表示為:

C = Ek3(Dk2(Ek1(P)))

P = Dk1(Ek2(Dk3(C)))

3DES同樣有ECB跟CBC模式,同上面講的一樣。這里需要注意一下Key的長度,應該是24位。比如我們已知的Key是16位的,那么我們需要將其分為2段,每一段都是8位,則k1=左8位, k2=右8位,k3=左8位,也就是  k1=k3,但不能k1=k2=k3,因為如果每段使用的Key都相同,就回到DES算法了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线国产精品视频| 久久亚洲精品国产亚洲老地址| 亚洲精品美女在线观看播放| 日韩精品在线视频美女| 97涩涩爰在线观看亚洲| 欧美一性一乱一交一视频| 国产日韩在线亚洲字幕中文| 国产精品va在线| 欧美另类暴力丝袜| 亚洲高清一二三区| 欧美中文字幕在线视频| 欧美极品在线视频| 久久人体大胆视频| 日韩欧美在线免费观看| 一区二区三区亚洲| 国产精品美女av| 亚洲自拍偷拍区| 亚洲人成人99网站| 欧美成人h版在线观看| 亚洲精品国产品国语在线| 国产a∨精品一区二区三区不卡| 欧美限制级电影在线观看| 久久国产精品久久精品| 欧美日韩国产成人高清视频| 日日骚久久av| 精品中文字幕在线观看| 久久99久久久久久久噜噜| 国产精品久久久久久久7电影| 国产精品久久在线观看| 欧美理论电影在线播放| 九九视频这里只有精品| 亚洲精品在线视频| 成人黄色中文字幕| 自拍偷拍亚洲在线| 亚洲女人初尝黑人巨大| 91香蕉亚洲精品| 日韩成人激情影院| 亚洲天天在线日亚洲洲精| 亚洲国产欧美一区二区三区同亚洲| 国产精品视频男人的天堂| 久久视频在线看| 欧美怡春院一区二区三区| 久久综合久久88| 欧美国产日韩视频| 成人有码视频在线播放| 亚洲欧美激情四射在线日| 国产精品九九九| 欧美成人亚洲成人日韩成人| 国产精品久久久久久久久男| 国产精品99久久久久久久久| 国产成人91久久精品| 中文字幕欧美精品日韩中文字幕| 欧美成人第一页| 日韩av大片免费看| 欧美性生交xxxxxdddd| 久久精品一本久久99精品| 久久亚洲精品网站| 亚洲第一av网| 精品成人乱色一区二区| 国产精品视频久久久| 亚洲综合精品一区二区| 欧美与黑人午夜性猛交久久久| 亚洲综合自拍一区| 精品中文视频在线| 91在线视频一区| 欧美激情成人在线视频| 精品久久久久久中文字幕| 国内精品久久久久影院 日本资源| 在线播放国产一区中文字幕剧情欧美| 亚洲最大成人免费视频| 在线电影中文日韩| 欧美午夜精品久久久久久久| 欧美一级视频一区二区| 日韩的一区二区| 欧美精品激情视频| 国产亚洲精品一区二区| 在线播放日韩专区| 亚洲激情视频网站| 国产福利精品在线| 久久精品成人一区二区三区| 中文字幕欧美在线| 国产精品老女人精品视频| 日韩久久午夜影院| 日韩在线观看高清| 韩剧1988在线观看免费完整版| 高清欧美电影在线| 欧美日韩性生活视频| 国产精品香蕉av| 久久久久五月天| 国产成人福利夜色影视| 午夜精品理论片| 午夜剧场成人观在线视频免费观看| 色99之美女主播在线视频| 91久久在线视频| 国产精品久久色| 超薄丝袜一区二区| 日韩成人激情视频| 亚洲人成电影网站色…| 欧美理论在线观看| 最新亚洲国产精品| 一区二区三区回区在观看免费视频| 国产成人avxxxxx在线看| 91av福利视频| 日本免费在线精品| 色多多国产成人永久免费网站| 国产精品国模在线| 欧美专区国产专区| 黄色成人av网| 黄色精品一区二区| 91国产高清在线| 亚洲成人免费网站| 亚洲人成欧美中文字幕| 亚洲欧洲在线播放| 亚洲大胆人体视频| 日韩美女在线观看| 亚洲自拍偷拍在线| 中文字幕久热精品视频在线| 午夜精品久久久久久久男人的天堂| 国产欧美精品一区二区三区-老狼| 成人免费观看网址| 国产精品久久久久久超碰| 亚洲成人精品久久久| 亚洲色图五月天| 成人亚洲激情网| 国产一区二区三区免费视频| 国产丝袜一区二区三区免费视频| 亚洲欧美日韩一区在线| 中日韩午夜理伦电影免费| 91精品啪aⅴ在线观看国产| 97久久久免费福利网址| 亚洲天堂av在线免费| 久久精品国产精品亚洲| 国产精品视频精品视频| 久久韩国免费视频| 欧美高清一级大片| 98午夜经典影视| 97国产成人精品视频| 欧美日韩国产丝袜美女| 97视频国产在线| 欧美成人免费视频| 91精品久久久久久久久| 26uuu国产精品视频| 久久这里只有精品视频首页| 在线观看亚洲区| 久久精品国产欧美亚洲人人爽| 亚洲人午夜色婷婷| 色狠狠av一区二区三区香蕉蜜桃| 欧美激情免费观看| 亚洲欧美另类自拍| 欧美日韩成人在线视频| 国语自产精品视频在线看| 亚洲精品国产精品国自产观看浪潮| 精品久久久国产| 欧美日韩国产一区二区三区| 97精品欧美一区二区三区| 97不卡在线视频| 奇米成人av国产一区二区三区| 亚洲欧洲日产国产网站| 麻豆一区二区在线观看| 久久久久成人网| 揄拍成人国产精品视频| 日韩有码视频在线| 日本成人精品在线| 日韩精品极品毛片系列视频|