Byte 转 char[] 数组的用法

2018-03-20  本文已影响0人  贪威风

今天在做md5加密的时候,因为硬件端用的是传入char[] 数据进行MD5加密,而我ios端生成的是字符型的数据,在转换过后,最后加密始终得不到跟文档一样的结果,现在终于解决该问题,记录一下。

下面为代码:

//摘要的长度

#define CC_MD5_DIGEST_LENGTH 16

//开辟一个16字节(128位:md5加密出来就是128位/bit)的空间(一个字节=8字位=8个二进制数)

uint8_t buffer[CC_MD5_DIGEST_LENGTH];

//输入的字符是采用16进制的数字,所以这里有一个转化

NSData * testData = [Encryption convertHexStrToData: chrSource];

Byte * byteArray = (Byte *)[testData bytes];

//这里的24,是因为我传递过来的字符是固定长48位的,

 char input[24] ={byteArray[0],byteArray[1],byteArray[2],byteArray[3],byteArray[4],byteArray[5],byteArray[6],byteArray[7],byteArray[8],byteArray[9],byteArray[10],byteArray[11],byteArray[12],byteArray[13],byteArray[14],byteArray[15],byteArray[16],byteArray[17],byteArray[18],byteArray[19],byteArray[20],byteArray[21],byteArray[22],byteArray[23]};

// MD5加密, 把str字符串转换成了32位的16进制数列(这个过程不可逆转) 存储到了result这个空间中

CC_MD5(input, (CC_LONG)sizeof(input), buffer);

//转化函数

//16进制转换为NSData

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

{

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

    {

        return nil;

    }

    NSMutableData *hexData = [[NSMutableData alloc]initWithCapacity:[str length] * 2];

    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;

    }

    NSLog(@"hexdata: %@", hexData);

    return hexData;

}

上一篇 下一篇

猜你喜欢

热点阅读