또질문여.. 파일을 암호화 할때 문제가 생겼슴다..

sunbee의 이미지

스트링은 암호화가 잘 됩니다..

그런데 문제는 파일을 암호화 하려고 합니다.

제 생각에 파일을 암호화 하는 방법은 파일을 읽어서 읽은만큼 암호화 하고, 저장하고, 다시 읽고 암호화 하고..

이런씩으로 할거라고 생각이 드는데요..

이런씩으로 txt 파일의 암호화에는 성공을 했는데요.. 엑셀파일이나 워드파일에는 중간중간에 null('\0') 값이 있습니다.

이것은 어떻게 처리를 해줘야 할까요??

도대체 null을 어떻게 처리를 해야합니까..

pynoos의 이미지

상황을 구체적으로 설명해주세요...

sunbee의 이미지

앞에서도 말씀 드렸듯이 제가 하고싶은것은 파일을 암호화 하는것입니다.

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

이럴때는 어떻게 암호화 시킬 수 있을까요??

^^;; 두서없이 이야기 했습니다.. 이해가 됐습니까? ^^

kaos의 이미지

바이너리로 읽으셔서 스트링 처리하는 함수들은 사용하지 마시고
메모리카피등을 사용하셔야 합니다.

maximus의 이미지

정확하게 내가 겪었던 문제군요.. ^^
MEMCPY는 복사시 당연한 문제지만 원인은 char string 으로 처리한데에 있습니다..

모든 암호화에서 공백이나 널값도 암호화 대상이 되어야 합니다..

고로 BYTE 형으로 잡아야 합니다..

BYTE = unsigned char 인거 아시죠 ?

그리고 암호화 형태에 따라 Block 모드 인지 Chain 모드인지에 따라 buffer 사이즈에 맞게 설정하는 팁(?)도 필요 할수도 있습니다..

=================================
:: how about a cup of tea ? ::
=================================

sunbee의 이미지

답변 정말 감사합니다...

Quote:

정확하게 내가 겪었던 문제군요.. ^^
MEMCPY는 복사시 당연한 문제지만 원인은 char string 으로 처리한데에 있습니다..

이부분이 제가 젤 고민되었던 부분입니다... 암호화 대상이 string 이었기 때문입니다.

Quote:

모든 암호화에서 공백이나 널값도 암호화 대상이 되어야 합니다..

이말은 저의 암호화 함수를 고쳐야 한단 말인지요??

지금 함수는 string을 암호화하게 설계되어 있거등요...

new5244의 이미지

엑셀 파일 같은 경우 binary 형태이니 중간죽안에 Null 혹은 \n 문자가 들어 갈수 가 있겠죠...

음... 파일내용을 읽을 때.. fgets() 대신 fread () 를 사용하고요..
아니면 직접 file io system calll 을 사용하도록 하면 될것 같구요

그리고 string을 암호화 해주는 함수를 변경해서 block 단위로 하도록 변경하면 되지 않을 까 생각되네요...

from saibi

maximus의 이미지

정리를 하면

버퍼는 unsigned char buf[BUFSIZE]; 이렇게 선언합니다..

화일에서 읽을때는

while ((bytes = fread(buf, 1, BUFSIZE, in)) != 0) {
.....
}

이런식으로 하시구요..

다 끝나면 타겟변수(또는 화일)에 memcpy(또는 fwrite) 하시면 됩니다.

=================================
:: how about a cup of tea ? ::
=================================

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.