美文网首页
纯des 加密

纯des 加密

作者: Kloar | 来源:发表于2017-04-11 10:52 被阅读29次

    #import@interface CommonFunc : NSObject

    //十六进制转换和nsdata的转换。

    + (NSString *)convertDataToHexStr:(NSData *)data;

    +(NSData *)convertHexStrToData:(NSString *)str;

    /*字符串加密

    *参数

    *plainText : 加密明文

    *key        : 密钥 64位

    */

    //加密方法encryptUseDES:key:如下

    +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString*)key;

    //解密方法decryptUseDES:key:如下

    +(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key;

    @end

    #import "CommonFunc.h"// base 加密//#import#import#include@implementation CommonFunc

    static Byte iv[8]={1,2,3,4,5,6,7,8};

    //加密方法encryptUseDES:key:如下

    +(NSString *) encryptUseDES:(NSString *)plainText key:(NSString*)key

    {

    NSString *ciphertext =nil;

    NSData* data=[plainText dataUsingEncoding: NSUTF8StringEncoding];

    //    NSLog(@"plainTextBytes with UTF-8 encoding:%@",[XYDESdataToHex:data]);

    NSUInteger bufferSize=([data length] + kCCKeySizeDES) & ~(kCCKeySizeDES -1);

    char buffer[bufferSize];

    memset(buffer, 0,sizeof(buffer));

    size_t bufferNumBytes;

    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,

    kCCAlgorithmDES,

    kCCOptionPKCS7Padding,

    [key UTF8String],

    kCCKeySizeDES,

    iv  ,

    [data bytes],

    [data length],

    buffer,

    bufferSize,

    &bufferNumBytes);

    if (cryptStatus ==kCCSuccess) {

    NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)bufferNumBytes];

    //        NSLog(@"objccipherTextBytes:%@",[XYDES dataToHex:data]);

    NSLog(@"JavacipherTextBytes:%@",@"D72EA24833C4731FE9960B48DB705E7AF99AB772C6E6E19CE8F3F8EA16EE5297");

    // base 加密

    //        ciphertext = [GTMBase64 stringByEncodingData:data];

    ciphertext =[self convertDataToHexStr: data];

    NSLog(@"objccipherTextBase64:%@",ciphertext);

    NSLog(@"JavacipherTextBase64:%@",@"1y6iSDPEcx/plgtI23Beevmat3LG5uGc6PP46hbuUpc=");

    }

    return ciphertext;

    }

    + (NSString *)convertDataToHexStr:(NSData *)data {

    if (!data || [data length] == 0) {

    return @"";

    }

    NSMutableString *string = [[NSMutableString alloc] initWithCapacity:[data length]];

    [data enumerateByteRangesUsingBlock:^(const void *bytes, NSRange byteRange, BOOL *stop) {

    unsigned char *dataBytes = (unsigned char*)bytes;

    for (NSInteger i = 0; i < byteRange.length; i++) {

    NSString *hexStr = [NSString stringWithFormat:@"%x", (dataBytes[i]) & 0xff];

    if ([hexStr length] == 2) {

    [string appendString:hexStr];

    } else {

    [string appendFormat:@"0%@", hexStr];

    }

    }

    }];

    return string;

    }

    +(NSData *)convertHexStrToData:(NSString *)str {

    if (!str || [str length] == 0) {

    return nil;

    }

    NSMutableData *hexData = [[NSMutableData alloc] initWithCapacity:8];

    NSRange range;

    if ([str length] % 2 == 0) {

    range = NSMakeRange(0, 2);

    } else {

    range = NSMakeRange(0, 1);

    }

    for (NSInteger i = range.location; i < [str length]; i += 2) {

    unsigned int anInt;

    NSString *hexCharStr = [str substringWithRange:range];

    NSScanner *scanner = [[NSScanner alloc] initWithString:hexCharStr];

    [scanner scanHexInt:&anInt];

    NSData *entity = [[NSData alloc] initWithBytes:&anInt length:1];

    [hexData appendData:entity];

    range.location += range.length;

    range.length = 2;

    }

    return hexData;

    }

    //解密方法decryptUseDES:key:如下

    +(NSString*) decryptUseDES:(NSString*)cipherText key:(NSString*)key

    {

    // base 加密

    //    NSData* data = [GTMBase64 decodeString:cipherText];

    NSData *data =[self convertHexStrToData:cipherText];

    NSUInteger bufferSize=([data length] + kCCKeySizeDES) & ~(kCCKeySizeDES -1);

    char buffer[bufferSize];

    memset(buffer, 0,sizeof(buffer));

    size_t bufferNumBytes;

    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,

    kCCAlgorithmDES,

    kCCOptionPKCS7Padding,

    [key UTF8String],

    kCCKeySizeDES,

    iv,

    [data bytes],

    [data length],

    buffer,

    bufferSize,

    &bufferNumBytes);

    NSString* plainText = nil;

    if (cryptStatus ==kCCSuccess) {

    NSData *plainData =[NSData dataWithBytes:buffer length:(NSUInteger)bufferNumBytes];

    //        NSLog(@"plainTextBytes:%@",[XYDES dataToHex:plainData]);

    plainText = [[NSString alloc] initWithData:plainData encoding:NSUTF8StringEncoding];

    }

    return plainText;

    }

    相关文章

      网友评论

          本文标题:纯des 加密

          本文链接:https://www.haomeiwen.com/subject/nuyyattx.html