또질문여.. 파일을 암호화 할때 문제가 생겼슴다..
글쓴이: sunbee / 작성시간: 목, 2003/03/06 - 12:10오전
스트링은 암호화가 잘 됩니다..
그런데 문제는 파일을 암호화 하려고 합니다.
제 생각에 파일을 암호화 하는 방법은 파일을 읽어서 읽은만큼 암호화 하고, 저장하고, 다시 읽고 암호화 하고..
이런씩으로 할거라고 생각이 드는데요..
이런씩으로 txt 파일의 암호화에는 성공을 했는데요.. 엑셀파일이나 워드파일에는 중간중간에 null('\0') 값이 있습니다.
이것은 어떻게 처리를 해줘야 할까요??
도대체 null을 어떻게 처리를 해야합니까..
Forums:
상황을 구체적으로 설명해주세요...
상황을 구체적으로 설명해주세요...
---
http://coolengineer.com
예~~
앞에서도 말씀 드렸듯이 제가 하고싶은것은 파일을 암호화 하는것입니다.
aaaaa
bbbb aa ~
.
.
.
이런씩으로 되어있는 text file 은 암호화가 잘~~ 됩니다.
방법은
while(buf = fgets(buf, 1024, myfp))
{
.
.
rsa_encrypt(buf);
.
.
}
이런씩으로 한라인씩 buf에 저장해서 암호화를 시킵니다..
그런데 엑셀파일을 암호화 하려고 하니 중간중간에 null값이 있어
while(buf = fgets(buf, 1024, myfp))
{
.
.
}
로 읽으니
read : [饉胥?
read : []
read : []
이런씩으로 읽힙니다.. 즉. 제대로 읽히지 않는거져..
밑의 내용은 엑셀 파일을 open(file, O_RDONLY); 함수로 열어서
한자씩 read 한 내용의 일부 인데요... 보시면 중간 중간에 널(0) 값이 들어있습니다.
6080-4-87-15-4677988063950201042020004302000-12602010-128080000000003724000321-1
27020-6342000021000-12502000-12402000-95034000321101010400000000000-3263000000-3
2630085020800214000000000000000622180-74000006400000000000290150300000010000000-
17060605500010000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000
이럴때는 어떻게 암호화 시킬 수 있을까요??
^^;; 두서없이 이야기 했습니다.. 이해가 됐습니까? ^^
바이너리로 읽으세요..
바이너리로 읽으셔서 스트링 처리하는 함수들은 사용하지 마시고
메모리카피등을 사용하셔야 합니다.
정확하게 내가 겪었던 문제군요.. ^^MEMCPY는 복사시 당연한 문
정확하게 내가 겪었던 문제군요.. ^^
MEMCPY는 복사시 당연한 문제지만 원인은 char string 으로 처리한데에 있습니다..
모든 암호화에서 공백이나 널값도 암호화 대상이 되어야 합니다..
고로 BYTE 형으로 잡아야 합니다..
BYTE = unsigned char 인거 아시죠 ?
그리고 암호화 형태에 따라 Block 모드 인지 Chain 모드인지에 따라 buffer 사이즈에 맞게 설정하는 팁(?)도 필요 할수도 있습니다..
=================================
:: how about a cup of tea ? ::
=================================
맞습니다.. 맞구요..
답변 정말 감사합니다...
이부분이 제가 젤 고민되었던 부분입니다... 암호화 대상이 string 이었기 때문입니다.
이말은 저의 암호화 함수를 고쳐야 한단 말인지요??
지금 함수는 string을 암호화하게 설계되어 있거등요...
엑셀 파일 같은 경우 binary 형태이니 중간죽안에 Null 혹은 \n
엑셀 파일 같은 경우 binary 형태이니 중간죽안에 Null 혹은 \n 문자가 들어 갈수 가 있겠죠...
음... 파일내용을 읽을 때.. fgets() 대신 fread () 를 사용하고요..
아니면 직접 file io system calll 을 사용하도록 하면 될것 같구요
그리고 string을 암호화 해주는 함수를 변경해서 block 단위로 하도록 변경하면 되지 않을 까 생각되네요...
from saibi
정리를 하면버퍼는 unsigned char buf[BUFSIZE]
정리를 하면
버퍼는 unsigned char buf[BUFSIZE]; 이렇게 선언합니다..
화일에서 읽을때는
while ((bytes = fread(buf, 1, BUFSIZE, in)) != 0) {
.....
}
이런식으로 하시구요..
다 끝나면 타겟변수(또는 화일)에 memcpy(또는 fwrite) 하시면 됩니다.
=================================
:: how about a cup of tea ? ::
=================================
댓글 달기