#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable:4996)
int main()
{
// 시리얼을 이용한 이름찾기
printf("Search Name by Serial !\n");
printf("Serial Input : ");
char serial[30];
scanf("%s", serial);
char arr[3] = { 0x10, 0x20, 0x30 };
int len = strlen(serial);
char tmp1[3] = { 0, };
char tmp2[3] = { 0, };
int index = 0;
printf("Name : ");
for (int i = 0; i < len * 2; i += 2)
{
memset(tmp1, 0, 3);
memset(tmp2, 0, 3);
memcpy(tmp2, &serial[i], 2);
for (int j = 0; j < 126; j++)
{
sprintf(tmp1, "%02X", j ^ arr[index % 3]);
if (!strcmp(tmp1, tmp2))
{
printf("%c", j);
index++;
break;
}
}
}
printf("\n\n\n");
// 여기부턴 원본 프로그램과 동작만 비슷하게 복원...
char buf[100] = { 0, };
char b[196] = { 0, };
char c[4] = { 0x10, 0x20, 0x30, };
printf("Chacking Serial !\n");
printf("Name Input: ");
scanf("%s", buf);
if (strlen(buf))
{
for (int i = 0; i < strlen(buf); i++)
{
sprintf(b, "%s%02X", b, c[i % 3] ^ buf[i]);
if (i < strlen(b))
continue;
}
}
memset(buf, 0, sizeof(buf));
printf("Serial Input : ");
scanf("%s", buf);
int i = 0;
short check = 0;
do
{
if (buf[i] != b[i])
{
check = 1;
break;
}
else if (!buf[i])
break;
if (buf[i + 1] != b[i + 1])
{
check = 1;
break;
}
else if (!buf[i + 1])
break;
i += 2;
} while (buf[i]);
if (check == 0)
printf("Correct!\n");
else
{
printf("Wrong\n");
printf("시리얼 값 : %s\n", b);
}
return 0;
}