파일을 바이너리로 받고 xor이용해 암호화 하고 다시 해독하는거 질문입니다
지율
제가 빨깧게 만든 부분이 잘못 된거 같은데 이거 가지고 하루종일 해맸는데 어떤게 잘못됬는지를 모르겠어여. 부탁드립니다.
#includestdio.h
#includestdlib.h
int hash1 (FILE* sp);
void encrypt(FILE* sp, FILE* cip, int key);
void decrypt(FILE* sp, FILE* cip, int key);
int main()
{
int key,st1;
FILE* sp;
FILE* cip;
printf(enter the key value\n);
scanf(%d, &key);
if(!(sp=fopen(cleartext.txt, r+)))
{
printf(Error opening file\n);
exit(1);
}
if(!(cip=fopen(ciphertext.bin,wb)))
{
printf(Error opening file\n);
exit(1);
}
if(key0)
{
printf(Input error\n);
exit(1);
}
encrypt(sp,cip,key);
decrypt(sp,cip,key);
st1=hash1(sp);
printf(The value of hash is %d\n,st1);
fclose(sp);
fclose(cip);
return 0;
}
int hash1(FILE* sp)
{
unsigned int hash=0,message=0;
char cd;
rewind(sp);
if(sp==NULL)
{
printf(File open error\n);
exit(1);
}
while((cd=fgetc(sp))!=EOF)
{
fseek(sp,-1,SEEK_CUR);
fread(&message,sizeof(int),1,sp);
hash=hash+message;
}
return hash;
}
void encrypt(FILE* sp,FILE* cip,int key)
{
char cd;
unsigned int message,cipher;
if(sp==NULL)
{
printf(File open error\n);
exit(1);
}
while((cd=fgetc(sp))!=EOF)
{
fseek(sp,-1,SEEK_CUR);
fread(&message,sizeof(int),1,sp);
cipher=message^key;
fwrite(&cipher,sizeof(int),1,cip);
}}
void decrypt(FILE *sp, FILE *cip, int key)
{
char cd;
unsigned int message,cipher;
int a;
if(cip==NULL)
{
printf(File open error\n);
exit(1);
}
while((a=fread(&cipher,sizeof(int),1,cip))!=0)
{
message=cipher^key;
cd=fputc(message,stdout);
}
}
-
해찬솔
4바이트씩 잘리는것은 뒤에 널문자 3개 더붙여서 해결할 생각입니다. 제가 부족한 부분을 지적해주셔서 감사드립니다. ㅎㅎ 그런데 2번빼고는 바꾸어봤는데 텍스트로 못읽는 거같아여 뭔가 잘못된건지 다시 질문드립니다. 꾸벅
-
마루
1. cip는 \wb\로 열었지만 fread()를 사용했습니다.
2. int 크기만큼을 단위로 암호화하는데요. 파일의 크기가 int의 크기의 배수가 아닌 경우는 어떻게 할건가요?
3. hash1()함수에서 sp가 유효한지 검사하기 전에 rewind()를 호출했네요.
이렇게 파일에서 하나씩 읽어서 처리하는 것보다,
일정 크기(4킬로바이트 등 편한대로)의 버퍼에 읽어서 그만큼 처리한 뒤에 파일에 쓰는 것이 처리하기도 좋으며 속도도 더 빠릅니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2695766 | 달팽이 배열 어디서 틀렸는지 모르겠습니다ㅠㅠ | 연분홍 | 2025-05-23 |
2695738 | fopen과fclose질문~~ (5) | 희선 | 2025-05-23 |
2695707 | 3의 배수 나타내기. (2) | 수리 | 2025-05-23 |
2695626 | 피보나치수열 과제 때문에 질문 드립니다. (6) | 옆집언니 | 2025-05-22 |
2695595 | 포인트공부중입니다 int형에서 4=1 인가요? (3) | 족장 | 2025-05-22 |
2695567 | 드라이브 고유번호를 가져오는 함수 (2) | 초코맛사탕 | 2025-05-21 |
2695533 | 음수의 산술변환! 질문이요 ㅠㅠ... (4) | 꽃여름 | 2025-05-21 |
2695506 | 구조체 배열 이용 도서목록 출력 프로그램 (1) | 가을귀 | 2025-05-21 |
2695450 | c언어 함수 질문이요.... | 이슬비 | 2025-05-20 |
2695403 | VirtualAlloc함수 및 메모리 질문 | 크리에이터 | 2025-05-20 |
2695355 | c언어 for함수 | 미쿡 | 2025-05-19 |
2695327 | 안녕하세요 제가 이번에 좀 큰 프로그램을.. | 악당 | 2025-05-19 |
2695295 | mutex동기화의 thread기반 채팅 서버소스 질문입니다 | 그루터기 | 2025-05-19 |
2695270 | 질문이요..swap 관한겁니다..ㅠㅠ (3) | 콩알녀 | 2025-05-19 |
2695244 | 노땅초보궁금한게 하나 있는데요..반복문(while문)초보자질문 (6) | 큰꽃늘 | 2025-05-18 |
2695166 | do while 문 어떤것이잘못된건지 모르겠어요 (2) | 아이폰 | 2025-05-18 |
2695122 | 구조체에 대해 물어보고 싶은게 있습니다 ^^^.. (7) | 수련 | 2025-05-17 |
2695091 | txt 파일 입출력 후 2차 배열에 저장하기입니다. (3) | 헛장사 | 2025-05-17 |
2695063 | 수도요금 프로그램좀 짜주세요. | 시내 | 2025-05-17 |
2695033 | 답변좀요ㅠㅠ (1) | 비사벌 | 2025-05-16 |