.h
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonDigest.h>
#import <CommonCrypto/CommonCryptor.h>
@interface DESUtility : NSObject {
}
+ (NSString *)GetToken;
+ (NSString*)encryptStr:(NSString*)plainText key:(NSString*)key;
+ (NSString*)encryptStr2:(NSString*)plainText key:(NSString*)hexkey;
+ (NSString*)decryptStr:(NSString*)encryptText key:(NSString*)key;
+ (NSString*)decryptStr2:(NSString*)encryptText key:(NSString*)hexkey;
@end
.M
#import "DESUtility.h"
#import <CommonCrypto/CommonCryptor.h>
#import "GTMBase64.h"
static Byte iv[] = {1,2,3,4,5,6,7,8};
@implementation DESUtility
+ (NSString *) GetToken
{
//获取系统时间
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyyMMddHHmmss"];
NSDate * date =[NSDate date];
NSString *strdateTime = [formatter stringFromDate:date];
UserModel *user = [AppDelegate sharedAppDelegate].defaultUser;
NSString *temptoken = [NSString stringWithFormat:@"%@%@000000",user.userNo,strdateTime];
NSString *strtoken = [self encryptStr:temptoken key:login_key];
return strtoken;
}
// 加密方法
+ (NSString*)encryptStr:(NSString*)plainText key:(NSString*)key{
NSString *ciphertext = nil;
//十六进制数组
NSData *cipherData = [NSStringTool convertHexStrToData:plainText];
Byte *textBytes = (Byte *)[cipherData bytes];
//加密字符串为十进制数组 const char *textBytes = [plainText UTF8String];
NSUInteger dataLength = [cipherData length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionECBMode,
[key UTF8String], kCCKeySizeDES,
nil,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
ciphertext = [NSStringTool convertDataToHexStr:data];
//base64时用如下方法
// ciphertext = [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding];
}
return ciphertext;
}
// 加密方法
+ (NSString*)encryptStr2:(NSString*)plainText key:(NSString*)hexkey{
NSString *ciphertext = nil;
//十六进制数组
NSData *cipherData = [NSStringTool convertHexStrToData:plainText];
NSData *keyData = [NSStringTool convertHexStrToData:hexkey];
Byte *textBytes = (Byte *)[cipherData bytes];
//加密字符串为十进制数组 const char *textBytes = [plainText UTF8String];
NSUInteger dataLength = [cipherData length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionECBMode,
[keyData bytes], kCCKeySizeDES,
nil,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
ciphertext = [NSStringTool convertDataToHexStr:data];
//base64时用如下方法
// ciphertext = [[NSString alloc] initWithData:[GTMBase64 encodeData:data] encoding:NSUTF8StringEncoding];
}
return ciphertext;
}
// 解密方法
+ (NSString *)decryptStr:(NSString*)cipherText key:(NSString*)key
{
// NSData* cipherData = [GTMBase64 decodeString:cipherText];//base64时用此方法
NSData *cipherData = [NSStringTool convertHexStrToData:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
nil,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
// plainText = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];
plainText = [NSStringTool convertDataToHexStr:data];
}
return plainText;
}
// 解密方法
+ (NSString *)decryptStr2:(NSString*)cipherText key:(NSString*)hexkey
{
// NSData* cipherData = [GTMBase64 decodeString:cipherText];//base64时用此方法
NSData *cipherData = [NSStringTool convertHexStrToData:cipherText];
NSData *keyData = [NSStringTool convertHexStrToData:hexkey];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionECBMode,
[keyData bytes],
kCCKeySizeDES,
nil,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
// plainText = [[NSString alloc] initWithData:data encoding:NSUnicodeStringEncoding];
plainText = [NSStringTool convertDataToHexStr:data];
}
return plainText;
}
@end
//若需要GTMBase64,则需添加GTMBase64.H GTMBase64.M GTMDefines.h