1.des对称加密,是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该对称密码,是一种对称加密算法。
源码链接 :https://gitee.com/xuanTestApp/testApp.git
2. ************** WHDesOperation.h文件
//
// WHDesOperation.h
// DesEncryption
//
// Created by weihong xuan on 2015/12/14.
// Copyright © 2015年 weihong xuan. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface WHDesOperation : NSObject
/**
* 对NSString进行des对称加密
*
* @param plainText 要加密的字符串
* @param key 加密的key
* @param randomFlag 加密时是否要包含随机数
*
* @return 加密后的字符串
*/
+ (NSString *)encryptUseDES:(NSString*)plainText key:(NSString *)key isHaveRandomNumber:(BOOL)randomFlag;
/**
* 解密字符串
*
* @param cipherText 密文字符串
* @param key 加密的key
* @param randomFlag 加密时是否要包含随机数
*
* @return 解密后的字符串
*/
+ (NSString *)decryptUseDES:(NSString*)cipherText key:(NSString*)key isHaveRandomNumber:(BOOL)randomFlag;
@end
3. ************** WHDesOperation.m文件
//
// WHDesOperation.m
// DesEncryption
//
// Created by weihong xuan on 2015/12/14.
// Copyright © 2015年 weihong xuan. All rights reserved.
//
#import "WHDesOperation.h"
#import <CommonCrypto/CommonCrypto.h>
#import "GTMBase64.h"
@implementation WHDesOperation
//加密
+ (NSString *)encryptUseDES:(NSString*)plainText key:(NSString *)key isHaveRandomNumber:(BOOL)randomFlag{
NSString *ciphertext = nil;
NSString *charactersToEscape =@"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
NSCharacterSet *allowedCharacters = [[NSCharacterSetcharacterSetWithCharactersInString:charactersToEscape]invertedSet];
plainText = [plainText stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
const char *textBytes = [plainTextUTF8String];
NSUInteger dataLength = [plainText length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
CCCryptorStatus cryptStatus;
size_t numBytesEncrypted = 0;
if (randomFlag) {
Byte iv[] = {1,2,3,4,5,6,7,8};
cryptStatus = CCCrypt(kCCEncrypt,kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String],kCCKeySizeDES,
iv,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
}else{
cryptStatus = CCCrypt(kCCEncrypt,kCCAlgorithmDES,
kCCOptionPKCS7Padding |kCCOptionECBMode,
[key UTF8String],kCCKeySizeDES,
nil,
textBytes, dataLength,
buffer, dataLength + kCCBlockSizeAES128,
&numBytesEncrypted);
}
if (cryptStatus == kCCSuccess) {
NSData *data = [NSDatadataWithBytes:bufferlength:(NSUInteger)numBytesEncrypted];
ciphertext = [[NSStringalloc]initWithData:[GTMBase64encodeData:data]encoding:NSUTF8StringEncoding];
}
return ciphertext;
}
//解密
+ (NSString *)decryptUseDES:(NSString*)cipherText key:(NSString*)key isHaveRandomNumber:(BOOL)randomFlag{
NSData* cipherData = [GTMBase64decodeString:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus;
if (randomFlag) {
Byte iv[] = {1,2,3,4,5,6,7,8};
cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String],
kCCKeySizeDES,
iv,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
}else{
cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding |kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
nil,
[cipherData bytes],
[cipherData length],
buffer,
[cipherData length] +kCCBlockSizeAES128,
&numBytesDecrypted);
}
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSDatadataWithBytes:bufferlength:(NSUInteger)numBytesDecrypted];
plainText = [[NSStringalloc]initWithData:dataencoding:NSUTF8StringEncoding];
plainText = [plainText stringByRemovingPercentEncoding];
}
return plainText;
}
@end
4.**************** 使用
//
// ViewController.m
// DesEncryption
//
// Created by weihong xuan on 2015/12/14.
// Copyright © 2015年 weihong xuan. All rights reserved.
//
#import "ViewController.h"
#import "WHDesOperation.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
NSString * testStr = @"要加密的字符 ^&%*+";
NSString * desKey =@"密码123456";//加密运算、解密运算时所使用的密钥
NSString * encStr = [WHDesOperationencryptUseDES:testStrkey:desKeyisHaveRandomNumber:YES];
NSLog(@"加密后的字符串:%@",encStr);
NSString * decStr = [WHDesOperationdecryptUseDES:encStrkey:@"123"isHaveRandomNumber:YES];
NSLog(@"密码错误时解密后的字符串:%@",decStr);
decStr = [WHDesOperationdecryptUseDES:encStrkey:@"密码123456"isHaveRandomNumber:NO];
NSLog(@"密码正确时随机数错误时 解密后的字符串:%@",decStr);
decStr = [WHDesOperationdecryptUseDES:encStrkey:@"密码123456"isHaveRandomNumber:YES];
NSLog(@"正确解密后的字符串:%@",decStr);
}
- (void)didReceiveMemoryWarning {
[superdidReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end