iOS DES加密算法

.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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值