iOS的3DES加密写法

来源:互联网 发布:战略家炒股软件 编辑:程序博客网 时间:2024/05/29 08:03

/*

 

 加密

 

 */

+ (NSString *)encrypt3DES:(NSString *)src key:(NSString *)key{

    constvoid *vplainText;

    size_t plainTextBufferSize;

    NSData* data = [srcdataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)];

    plainTextBufferSize = [data length];

    vplainText = (constvoid *)[data bytes];

    CCCryptorStatus ccStatus;

    uint8_t *bufferPtr =NULL;

    size_t bufferPtrSize =0;

    size_t movedBytes =0;

    

    bufferPtrSize = (plainTextBufferSize + kCCBlockSizeDES) & ~(kCCBlockSizeDES -1);

    bufferPtr = malloc( bufferPtrSize *sizeof(uint8_t));

    memset((void *)bufferPtr,0x0, bufferPtrSize);

    constvoid *vkey = (constvoid *)[key UTF8String];

    

    ccStatus = CCCrypt(kCCEncrypt,

                       kCCAlgorithmDES,

                       kCCOptionPKCS7Padding |kCCOptionECBMode,

                       vkey,

                       kCCKeySizeDES,

                       nil,

                       vplainText,

                       plainTextBufferSize,

                       (void *)bufferPtr,

                       bufferPtrSize,

                       &movedBytes);

    

    NSData *myData = [NSDatadataWithBytes:(constvoid *)bufferPtr length:(NSUInteger)movedBytes];

    return [selfNSDataToHexString:myData];

}



/*

 

 解密

 

*/

+ (NSString *)decrypt3DES:(NSString *)src key:(NSString *)key{

    constvoid *vplainText;

    size_t plainTextBufferSize;

    NSData *EncryptData = [selfhexStrToNSData:src];

    plainTextBufferSize = [EncryptData length];

    vplainText = [EncryptData bytes];

    CCCryptorStatus ccStatus;

    uint8_t *bufferPtr =NULL;

    size_t bufferPtrSize =0;

    size_t movedBytes =0;

    

    bufferPtrSize = (plainTextBufferSize + kCCBlockSizeDES) & ~(kCCBlockSizeDES -1);

    bufferPtr = malloc( bufferPtrSize *sizeof(uint8_t));

    memset((void *)bufferPtr,0x0, bufferPtrSize);

    constvoid *vkey = (constvoid *)[key UTF8String];

    ccStatus = CCCrypt(kCCDecrypt,

                       kCCAlgorithmDES,

                       kCCOptionPKCS7Padding |kCCOptionECBMode,

                       vkey,

                       kCCKeySizeDES,

                       nil,

                       vplainText,

                       plainTextBufferSize,

                       (void *)bufferPtr,

                       bufferPtrSize,

                       &movedBytes);

    

    NSData *dataBuf = [NSDatadataWithBytes:(constvoid *)bufferPtr length:(NSUInteger)movedBytes];

    return [[NSStringalloc] initWithData:dataBuf

                                 encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)]

    ;

}



//十六进制字符串转化为二进制

- (NSData *)hexStrToNSData:(NSString *)hexStr{

    NSMutableData* data = [NSMutableDatadata];

    for (int i =0; i+2 <= hexStr.length; i+=2) {

        NSRange range =NSMakeRange(i, 2);

        NSString* ch = [hexStrsubstringWithRange:range];

        NSScanner* scanner = [NSScannerscannerWithString:ch];

        unsignedint intValue;

        [scanner scanHexInt:&intValue];

        [data appendBytes:&intValuelength:1];

    }

    

    return data;

}



//二进制转化为十六进制

- (NSString *)NSDataToHexString:(NSData *)data{

    if (data ==nil) {

        returnnil;

    }

    

    NSMutableString* hexString = [NSMutableStringstring];

    constunsigned char *p = [databytes];

    for (int i=0; i < [datalength]; i++) {

        [hexString appendFormat:@"%02x", *p++];

    }

    

    return [hexStringuppercaseString];

}


0 0
原创粉丝点击