32바이트 NSData를 XOR비트 연산하여 8바이트 크기로 생성.
C로 쓰니 메모리 에러가 너무 많이나서 호출하다보면 크러시가 남.
( Heap corruption detected 등등)
ObjC로 변경한 코드.
- (NSMutableData*) makeHashWithData:(NSData *)shaData {
NSData *shaData1 = [shaData subdataWithRange:NSMakeRange(0, 16)];
NSData *shaData2 = [shaData subdataWithRange:NSMakeRange(16, 16)];
NSMutableData *result1 = [shaData1 mutableCopy];
char *dataPtr = (char *) [result1 mutableBytes];
char *keyData = (char *) [shaData2 bytes];
char *keyPtr = keyData;
int keyIndex = 0;
for (int x = 0; x < [shaData1 length]; x++)
{
*dataPtr = *dataPtr ^ *keyPtr;
dataPtr++;
keyPtr++;
if (++keyIndex == [shaData2 length])
(void)(keyIndex = 0), keyPtr = keyData;
}
NSData *shaData11 = [result1 subdataWithRange:NSMakeRange(0, 8)];
NSData *shaData22 = [result1 subdataWithRange:NSMakeRange(8, 8)];
NSMutableData *result2 = [shaData11 mutableCopy];
char *dataPtr2 = (char *) [result2 mutableBytes];
char *keyData2 = (char *) [shaData22 bytes];
char *keyPtr2 = keyData2;
int keyIndex2 = 0;
for (int x = 0; x < [shaData11 length]; x++)
{
*dataPtr2 = *dataPtr2 ^ *keyPtr2;
dataPtr2++;
keyPtr2++;
if (++keyIndex2 == [shaData22 length])
(void)(keyIndex2 = 0), keyPtr2 = keyData2;
}
return result2;
}
//-----------------------C language-------------------------//
- (NSMutableData *)makeHashWithData:(NSData *)shaData {
NSUInteger len = [shaData length];
char *former = (char*)malloc(len/2);
char *latter = (char*)malloc(len/2);
memcpy(former, &[shaData bytes][0], len);
memcpy(latter, &[shaData bytes][16], len);
char *xor = (char *)malloc(len/2);
for (int i = 0; i< 16; i++) {
xor[i] = former[i] ^ latter[i];
}
NSData *xorData = [NSData dataWithBytesNoCopy:xor length:16 freeWhenDone:YES];
NSUInteger xlen = [xorData length];
char *former1 = (char *)malloc(8);
char *latter1 = (char *)malloc(8);
memcpy(former1, &[xorData bytes][0], xlen/2);
memcpy(latter1, &[xorData bytes][8], xlen/2);
char *xor1 = (Byte *)malloc(xlen/2);
for (int i = 0; i< 8; i++) {
xor1[i] = former1[i] ^ latter1[i];
}
NSMutableData *xorData1 = [NSMutableData dataWithBytesNoCopy:xor1 length:8 freeWhenDone:YES];
return xorData1;
}
참고링크)
https://stackoverflow.com/questions/724086/how-to-convert-nsdata-to-byte-array-in-iphone
'iOS > Objective-c' 카테고리의 다른 글
[ObjC]URL 파싱해서 파라미터 추출 (0) | 2019.07.09 |
---|---|
[ObjC]UIActivityViewController를 사용한 파일 저장/공유 (0) | 2019.07.09 |
[ObjC] iOS 연결된 Bluetooth 기기 앱과 연결시켜주기 (0) | 2019.03.21 |
[ObjC] EAAccessory 사용해서 Bluetooth 연결하기 (0) | 2019.03.16 |
[ObjC] 텍스트 암호화 (0) | 2019.02.26 |