2012-11-24 4 views
1

텍스트 파일에서 암호화 된 파일을 비 파이시로 작성했습니다. 쇠고기는 pycrypto를 사용합니다. ... 압축 된 암호화 된 파일이 원본보다 큽니다

그래서 내 소스 텍스트 파일 33,742 바이트이고 암호화 된 버전은 확인 지금까지 33752. 그게 전부지만

나는 마지막 -czvf 타르와 test.enc (암호화 된 테스트 파일)을 압축 할 때 파일은 33989 바이트입니다. 원본 파일이 암호화 될 때 압축이 작동하지 않는 이유는 무엇입니까?

지금까지 유일한 옵션은 압축 한 다음 암호화하여 파일 크기를 작게 유지하는 것입니다.

답변

7

압축은 데이터의 패턴을 식별하여 작동합니다. 암호화 된 데이터의 패턴을 식별 할 수 없으므로 (전체 요점) 압축 할 수 없습니다.

33,742 바이트 출력을 생성하는 완벽한 암호화 알고리즘의 경우 해독 된 원본 데이터에 대해 결정할 수있는 것이 33,742 바이트이지만 그 이상은 맞지 않는다는 것이 이상적입니다. 31,400 바이트로 압축 할 수 있다면 무작위 데이터가 패턴이없고 압축 할 수 없으므로 입력 데이터가 32,000 바이트의 임의 데이터가 아니라는 것을 즉시 알 수 있습니다. 이는 암호화 체계에서 오류가 있음을 나타냅니다. 해독 된 데이터가 무작위인지 여부는 아무도의 비즈니스가 아닙니다.

+0

* '압축 된 데이터의 패턴'* : '암호화 된 데이터의 패턴'을 대신 사용하셨습니까? –

+0

감사합니다. 고쳐졌습니다. –

+0

게시물을 업데이트 해 주셔서 감사합니다. 먼저 압축 한 다음 암호화합니다. 내 문제는 아니지만 암호화 된 파일을 압축 한 결과에 대해 궁금해하고 Martijn은 두 가지 큰 답변을 적었습니다. 덕분에 – dave

1

tar -z가 사용하는 압축 방법은 입력 파일의 패턴을 반복하여 패턴을 반복 한 횟수 (심하게 단순화 한 횟수)로 대체합니다.

그러나 파일을 암호화 할 때 기본적으로 반복되는 패턴을 가능한 '많은'랜덤 노이즈로 숨기려고합니다. 그러면 파일이 거의 압축되지 않습니다. 이를 압축 파일 형식 (메타 데이터 등)의 오버 헤드와 결합하면 파일이 실제로는 약간 더 커지게됩니다.

이 과정을 반대해야합니다. 먼저 을 압축하고을 암호화하면 더 적은 페이로드로 끝낼 가능성이 크게 높아집니다.

+0

이 압축되므로 먼저 압축 한 다음 더 나은 솔루션을 암호화합니까? 압축은 사용 된 파일에 대해 평균 4 배의 공간을 절약하기 때문에 가치가 있습니다. – dave

+1

예, tar 헤더는 약 100-200 바이트의 0이 아닌 문자가있는 512 바이트입니다. –

+1

@dave : 그렇습니다. 압축을 먼저하고 암호화를 수행하면 더 적은 페이로드가 발생할 수 있습니다. –

관련 문제