DES.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. //
  2. // DES.m
  3. // zhuxun
  4. //
  5. // Created by Justine on 16/6/23.
  6. //
  7. //
  8. #import "DES.h"
  9. #import "MD5.h"
  10. #define skey @"abcdef01"
  11. @implementation DES
  12. const Byte iv[8] = {0xEF, 0x24, 0x36, 0x08, 0x70, 0xBB, 0x8D, 0xFF};
  13. //加密方法-default key
  14. +(NSString *) encryptUseDES:(NSString *)plainText
  15. {
  16. NSString *ciphertext = nil;
  17. NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
  18. NSUInteger dataLength = [textData length];
  19. NSUInteger bufferLength = dataLength;
  20. //如果数据长度是8的倍数则直接声明对应长度的缓冲区空间,反之填充
  21. NSUInteger remainder = dataLength%8;
  22. if(remainder != 0){
  23. //假设长度为65 为8余1 则填充8-1(余数)7 65+7 = 72
  24. bufferLength = bufferLength+(kCCBlockSizeDES-remainder);
  25. }
  26. bufferLength = bufferLength+1024;
  27. unsigned char buffer[bufferLength];
  28. //unsigned char buffer[1024];
  29. memset(buffer, 0, sizeof(char));
  30. size_t numBytesEncrypted = 0;
  31. CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
  32. //kCCOptionECBMode,
  33. kCCOptionPKCS7Padding,
  34. [skey UTF8String], kCCKeySizeDES,
  35. iv,
  36. [textData bytes], dataLength,
  37. buffer, bufferLength,
  38. &numBytesEncrypted);
  39. if (cryptStatus == kCCSuccess) {
  40. NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
  41. //NSString *utf8str = [[NSString alloc] initWithData:data encoding:kCFStringEncodingUTF8];
  42. //NSLog(@"加密成功 未base64 utf8 值 %@",utf8str);
  43. ciphertext = [GTMBase64 stringByEncodingData:data];
  44. NSLog(@"加密成功base64 后: %@",ciphertext);
  45. }
  46. return ciphertext;
  47. }
  48. //解密方法
  49. //Des解密-default key
  50. +(NSString *)decryptUseDES:(NSString *)cipherText
  51. {
  52. NSString *plaintext = nil;
  53. NSData *cipherdata = [GTMBase64 decodeString:cipherText];
  54. NSUInteger bufferLength = [cipherdata length];
  55. NSUInteger remainder = bufferLength%8;
  56. if(remainder != 0){
  57. //假设长度为65 为8余1 则填充8-1(余数)7 65+7 = 72
  58. bufferLength = bufferLength+(kCCBlockSizeDES-remainder);
  59. }
  60. bufferLength = bufferLength+1024;
  61. unsigned char buffer[bufferLength];
  62. memset(buffer, 0, sizeof(char));
  63. size_t numBytesDecrypted = 0;
  64. CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, // 加密/解密
  65. kCCAlgorithmDES, // 加密根据哪个标准(des,3des,aes。。。。)
  66. //kCCOptionECBMode,
  67. kCCOptionPKCS7Padding, // 选项分组密码算法
  68. [skey UTF8String], // 密钥
  69. kCCKeySizeDES, // DES 密钥的大小
  70. iv, // 可选的初始矢量
  71. [cipherdata bytes], // 数据的存储单元
  72. [cipherdata length], // 数据的大小
  73. buffer, bufferLength,
  74. &numBytesDecrypted);
  75. if(cryptStatus == kCCSuccess)
  76. {
  77. NSData *plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
  78. plaintext = [[NSString alloc]initWithData:plaindata encoding:NSUTF8StringEncoding];
  79. NSLog(@"解密成功: %@",plaintext);
  80. }
  81. return plaintext;
  82. }
  83. #warning 为什么有些情况无法加密----2016-08-01 18:09 MD5:2A559C9E887AE2F9D6C9C4A65520F0F0,KEY:5520F0F0,CONTENT:(null),原content:Skskndnd
  84. //加密方法
  85. +(NSString *) encryptUseDES:(NSString *)plainText withRandomKey:(NSString *)randomKey
  86. {
  87. NSString *ciphertext = nil;
  88. NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
  89. NSUInteger dataLength = [textData length];
  90. NSUInteger bufferLength = dataLength;
  91. NSUInteger remainder = bufferLength%8;
  92. if(remainder != 0){
  93. //假设长度为65 为8余1 则填充8-1(余数)7 65+7 = 72
  94. bufferLength = bufferLength+(kCCBlockSizeDES-remainder);
  95. }
  96. bufferLength = bufferLength+1024;
  97. unsigned char buffer[bufferLength];
  98. memset(buffer, 0, sizeof(char));
  99. size_t numBytesEncrypted = 0;
  100. CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
  101. //kCCOptionECBMode,
  102. kCCOptionPKCS7Padding,
  103. [randomKey UTF8String], kCCKeySizeDES,
  104. iv,
  105. [textData bytes], dataLength,
  106. buffer, bufferLength,
  107. &numBytesEncrypted);
  108. //kCCBufferTooSmall
  109. if (cryptStatus == kCCSuccess) {
  110. NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
  111. //NSString *utf8str = [[NSString alloc] initWithData:data encoding:kCFStringEncodingUTF8];
  112. //NSLog(@"加密成功 未base64 utf8 值 %@",utf8str);
  113. ciphertext = [GTMBase64 stringByEncodingData:data];
  114. NSLog(@"加密成功base64 后: %@",ciphertext);
  115. }else{
  116. #warning 为什么有些情况无法加密----2016-08-01 18:09 MD5:2A559C9E887AE2F9D6C9C4A65520F0F0,KEY:5520F0F0,CONTENT:(null),原content:Skskndnd
  117. NSLog(@"加密失败");
  118. }
  119. return ciphertext;
  120. }
  121. //解密方法
  122. +(NSString *)decryptUseDES:(NSString *)cipherText withRandomKey:(NSString *)randomKey
  123. {
  124. NSString *plaintext = nil;
  125. NSData *cipherdata = [GTMBase64 decodeString:cipherText];
  126. NSUInteger bufferLength = [cipherdata length];
  127. NSUInteger remainder = bufferLength%8;
  128. if(remainder != 0){
  129. //假设长度为65 为8余1 则填充8-1(余数)7 65+7 = 72
  130. bufferLength = bufferLength+(kCCBlockSizeDES-remainder);
  131. }
  132. bufferLength = bufferLength+1024;
  133. unsigned char buffer[bufferLength];
  134. memset(buffer, 0, sizeof(char));
  135. size_t numBytesDecrypted = 0;
  136. CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, // 加密/解密
  137. kCCAlgorithmDES, // 加密根据哪个标准(des,3des,aes。。。。)
  138. //kCCOptionECBMode,
  139. kCCOptionPKCS7Padding, // 选项分组密码算法
  140. [randomKey UTF8String], // 密钥
  141. kCCKeySizeDES, // DES 密钥的大小
  142. iv, // 可选的初始矢量
  143. [cipherdata bytes], // 数据的存储单元
  144. [cipherdata length], // 数据的大小
  145. buffer, bufferLength,
  146. &numBytesDecrypted);
  147. if(cryptStatus == kCCSuccess)
  148. {
  149. NSData *plaindata = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
  150. plaintext = [[NSString alloc]initWithData:plaindata encoding:NSUTF8StringEncoding];
  151. NSLog(@"解密成功: %@",plaintext);
  152. }
  153. return plaintext;
  154. }
  155. + (NSString *)returnKeyValue
  156. {
  157. // double ts = [[NSDate date] timeIntervalSince1970]*1000;//毫秒
  158. // NSString *sts = [NSString stringWithFormat:@"%f",ts];
  159. // NSString *sktsmd5 =[MD5 getMD5:[NSString stringWithFormat:@"%@%f",skey,ts]];
  160. // // string = "ak==test110" + step1md5 +
  161. // NSDictionary *dict = @{@"ak":@"ak==test110",
  162. // @"md5": sktsmd5,
  163. // @"ts": sts
  164. // };
  165. // NSString *sdict = nil;
  166. // NSError *error;
  167. // NSData *sdata = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
  168. // if(!sdata){
  169. // NSLog(@"Got an error: %@", error);
  170. // assert(error);
  171. // }else{
  172. // sdict = [[NSString alloc] initWithData:sdata encoding:NSUTF8StringEncoding];
  173. //
  174. // }
  175. //
  176. // NSString *base = [DES encryptUseDES:sdict];//加密解密方法内含结果NSlog
  177. // NSLog(@"######\n%@",base);
  178. // base = [NSString stringWithFormat:@"Basic %@",base];
  179. //NSString *Authorization: Basic xxxxxxxxxx
  180. double ts = [[NSDate date] timeIntervalSince1970]*1000;//毫秒
  181. NSString *sts = [NSString stringWithFormat:@"%f",ts];
  182. NSString *sktsmd5 =[MD5 getMD5:[NSString stringWithFormat:@"%@%f",skey,ts]];
  183. // string = "ak==test110" + step1md5 +
  184. NSDictionary *dict = @{@"ak":@"ak==test110",
  185. @"md5": sktsmd5,
  186. @"ts": sts,
  187. };
  188. NSString *sdict = nil;
  189. NSError *error;
  190. NSData *sdata = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
  191. if(!sdata){
  192. NSLog(@"Got an error: %@", error);
  193. assert(error);
  194. }else{
  195. sdict = [[NSString alloc] initWithData:sdata encoding:NSUTF8StringEncoding];
  196. }
  197. NSString *base = [DES encryptUseDES:sdict];//加密解密方法内含结果NSlog
  198. return base;
  199. }
  200. + (NSString *)cloudStorageReturnKeyValue
  201. {
  202. NSString *basicAuthStr = [NSString stringWithFormat:@"%@:%@",Login_Name,@"Ab123456"];
  203. NSData * basicAuthData = [basicAuthStr dataUsingEncoding:NSASCIIStringEncoding];
  204. NSString * basicAuthValue = [NSString stringWithFormat:@"Basic %@",[basicAuthData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]];
  205. return basicAuthValue;
  206. }
  207. + (NSString *)cloudStorageDownUpReturnKeyValue
  208. {
  209. NSString *basicAuthStr = [NSString stringWithFormat:@"%@:%@",@"4f860649600a47508379639dba82327d",@"f3b58f6b935b4acd9d9e795864ad10d4"];
  210. NSData * basicAuthData = [basicAuthStr dataUsingEncoding:NSASCIIStringEncoding];
  211. NSString * basicAuthValue = [NSString stringWithFormat:@"Basic %@",[basicAuthData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]];
  212. return basicAuthValue;
  213. }
  214. @end