由于项目需要,所有的上传数据必须经过DES加密,折腾了一大早,弄完之后回头再看也不是很费劲,当时是没找准方法,简单地写一下,具体项目里大家就灵活运用吧。
1.如果多处地方需要加密,就最好单独创建一个类,然后在加密的地方调用即可(encryptViewController为加密类的名字)。
2 在encryptViewController.h中
#import <UIKit/UIKit.h>
#import <CommonCrypto/CommonCryptor.h>
@interface encryptViewController : UIViewController
-(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
@end
//加密算法
static Byte iv[] = {1,2,3,4,5,6,7,8};
-(NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
NSString *ciphertext = nil;
const char *textBytes = [plainText UTF8String];
NSUInteger dataLength = [plainText length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
iv,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
ciphertext = [data base64Encoding];
}
ciphertext =[ciphertext stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"];
return ciphertext;
}
//拼接
NSString *keyStr = @“具体要加密的内容”;
//加密
encryptViewController *encryVC = [[encryptViewController alloc]init];
NSString *ciphertext= [encryVC encryptUseDES:keyStr key:@“1111”(这里的key就是指你与服务器约定的表示符,也就是秘钥)。
];
NSLog(@"明文:%@",keyStr);
NSLog(@"秘钥:%@",@"220140527");
NSLog(@"密文:%@",ciphertext);
NSString*strurl = [NSString stringWithFormat:ciphertext];
4.然后就正常的上传数据了
//构建URL
NSURL *url=[NSURL URLWithString:strurl];
。。。。。。。。。。。。。。。。。。。。。。。。。。。