#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define RANDKEYVALUE 0x48276427
char szTransData[1024];
void TransLateData(char szData[])
{
int i = 0;
int szlen = 0;
char szBuffer[1024] = { NULL, };
srand(RANDKEYVALUE);
memset(szTransData, 0x00, sizeof(szTransData));
strcpy(szBuffer, szData);
strcat(szBuffer, "t");
szlen = strlen(szBuffer);
for(i = 0 ; i < szlen ; i++ )
szBuffer[i] ^= rand();
strcpy(szTransData, szBuffer);
}
void main()
{
TransLateData("111111111111111111111111111111111");
TransLateData("222222222222222222222222222222222");
TransLateData("333333333333333333333333333333333");
}
임의의 char값 szData를 받아서 그걸 암호화 하는 코드를 짜는중인데요,
main에서 세번째로 함수를 호출할때 변경되다가 중간에 짤려버리는 버그가 발생하더군요 -_ㅜ...
몇시간째 계속 생각해봤지만 그 원인을 도저히 모르겠습니다 ㅠㅠ... 이 버그좀 도와주세요 ;ㅁ;
szBuffer[i] ^= rand(); <---- 여기..
엄밀히 말하자면.. 이 암호화코드는 텍스트용이 아닌 바이너리용으로 보입니다.
아마 윗 코드에서 1/256의 확률로 0이 될 확률이 있습니다. 문자열에서 0이 들어가면 그 문자열은 거기서 끊깁니다.
그러면 그 밑의
strcpy(szTransData, szBuffer);
라는 함수에서 중간이 0이 나온 부분까지만 카피되게 됩니다. 그외에도 어떤 유효하지 않는 문자열이 들게가게 될지 모릅니다.
이 문제를 해결하기 위해서는 문자열관련 함수를 사용하지 말아야 할겁니다