파일 압축에 사용할 무료 라이브러리에 대한 권장 사항
파일을 압축하고 암호로 보호해야합니다. 이것에 대한 좋은 (무료) 라이브러리가 있습니까?
이것은 타사에서 열어야하므로 암호 보호는 표준 도구와 함께 작동해야합니다.
많은 검색 끝에 세 가지 접근 방식을 찾았습니다.
단일 파일 zip에 적합한 무료로 사용 가능한 소스 코드 세트입니다. 그러나 라이센스가 없습니다. 사용법은 AesZipOutputStream.zipAndEcrypt (...)입니다. http://merkert.de/de/info/zipaes/src.zip ( https://forums.oracle.com/forums/thread.jspa?threadID=1526137 )
업데이트 :이 코드는 이제 Apache 라이선스가 부여되었으며 http://code.google.com/p/winzipaes/ 에서 출시되었습니다 . 그것은 나를 위해 일했으며 (zip에있는 하나의 파일) Java의 오픈 소스 라이브러리에 구멍을 멋지게 채 웁니다.
상용 제품 (작성 당시 $ 500). 평가판 라이센스 접근 방식이 복잡하기 때문에 이것이 작동하는지 확인할 수 없습니다. 또한 포팅 된 .NET 앱 : http://www.nsoftware.com/ipworks/zip/default.aspx
상용 제품 (작성 당시 $ 290). dll을 사용하므로 Wnidows에만 적합 : http://www.example-code.com/java/zip.asp
zip 파일을 처리하는 순수 자바 라이브러리 인 Zip4j 를 사용해 볼 수 있습니다 . PKWare 및 AES 암호화 방법의 암호화 / 복호화를 지원합니다.
주요 특징들:
- Zip 파일에서 파일 생성, 추가, 추출, 업데이트, 제거
- 암호로 보호 된 Zip 파일 읽기 / 쓰기
- AES 128/256 암호화 지원
- 표준 Zip 암호화 지원
- Zip64 형식 지원
- Store (No Compression) 및 Deflate 압축 방식 지원
- 분할 Zip 파일 (예 : z01, z02, ... zip)에서 파일 생성 또는 추출
- 유니 코드 파일 이름 지원
- 진행 모니터
특허:
- Zip4j는 Apache 라이선스 버전 2.0으로 출시되었습니다 .
이것은 대답이 아니지만 잠재적 인 솔루션을 평가할 때 명심해야 할주의 사항입니다.
zip 암호화에 대해 매우 중요한 한 가지 :
여러 유형의 zip 암호화가 있습니다. 이전 유형 (원래 zip 표준의 일부)은 전혀 신경 쓸 가치가 없습니다 (온라인에서 쉽게 구할 수있는 앱으로 10 분 이내에 크랙 될 수 있음).
zip 파일을 암호화하는 경우 강력한 암호화 표준 중 하나를 사용해야합니다 (WinZip의 128 비트 및 256 비트 AES 표준이 가장 잘 지원된다고 생각합니다). 기술 사양 은 다음과 같습니다. 자체 Java 암호화 zip 시스템을 개발할 때 사용했습니다 (소스를 제공 할 수 없음-죄송합니다-내부 전용입니다).
암호화가없는 것보다 더 나쁜 것은 암호화가 있다고 생각하고 틀렸다는 것입니다 :-)
7-Zip에는 명령 줄 모드에서 암호를 추가하는 옵션이 있습니다. 아마도 당신은이 결과를 얻기 위해 그것을 실행할 수있을 것입니다 (그리고 좋은 압축 비율도 가지고 있습니다).
단점 : 외부 프로세스, 휴대하기 어렵고 (7-Zip 자체가 휴대 가능하더라도) 배포 라이센스가 확실하지 않습니다.
휴대 성이 뛰어난 InfoZip의 Zip 유틸리티도 암호를 지원합니다.
TrueZip을 사용해 볼 수도 있습니다. 기능에 대해서는 다음 링크를 참조하십시오. https://christian-schlichtherle.bitbucket.io/truezip/
TrueZip의 후속 제품은 https://christian-schlichtherle.bitbucket.io/truevfs/ 에서 찾을 수 있습니다.
다음은 winzipaes 1.0.1을 사용하는 예입니다. 이것은 단지 요점 일 뿐이며 정확히이 형식으로이 코드를 테스트하지 않았습니다.
import de.idyl.winzipaes.AesZipFileEncrypter;
import de.idyl.winzipaes.impl.AESEncrypterBC;
File aNewZipFile = new File("/tmp/foo.zip");
File existingUnzippedFile = new File("/tmp/src.txt");
// We use the bouncy castle encrypter, as opposed to the JCA encrypter
AESEncrypterBC encrypter = new AESEncrypterBC();
encrypter.init("my-password", 0); // The 0 is keySize, it is ignored for AESEncrypterBC
AesZipFileEncrypter zipEncrypter = new AesZipFileEncrypter(aNewZipFile, encrypter);
zipEncrypter.add(existingUnzippedFile, "src.txt", "my-password");
// remember to close the zipEncrypter
zipEncrypter.close();
Winzip (v9 +)을 사용하거나 Mac에서 "my-password"암호를 사용하여 7za (예 : 7zip)를 사용하여 "/tmp/foo.zip"의 압축을 풀 수 있습니다.
참고 : 위 코드에서 암호를 두 번 지정해야하는 이유가 명확하지 않습니다. 이 두 곳에서 다른 암호를 사용하면 어떻게 될지 모르겠습니다.
더 나은 사용 시나리오를 제공하면 다른 대안이 있습니다.
- zip 암호를 처리 할 수있는 표준 Zip 도구로 zip을 열어야합니까?
- The same question as previous are you going to pass this zip to an external entity that has to open the zip?
- Is it internal only and you just want to protect the contents of the zip?
For 3 then you can just use java to encrypt the stream contents of the zip as a normal file, probably best to change the file extension to .ezip or somesuch too.
For 1 and 2 then you can use the chillkat solution as mentioned, or an equivalent. However be aware that chillkat is not a pure Java solution, it uses JNI.
Additional info: I googled a bit more and indeed, it is a quite common question, and it appears there is no free solution (yet?).
Now, the standard algorithm of Zip encryption is well defined: See PKWARE's Application Note on the .ZIP file format. It appears to be an encryption done on the encrypted stream. If somebody feels like coding it...
Now, I wonder why Sun didn't include it in its library? Lack of standard? Patent/legal issue? Too weak to be usable?
Is there a good (free) library for this?
java.util.zip will do the zipping, but it won't do the passwords. And no, I don't know of any free ones that will. The cheapest I've seen is $150 for a developer seat.
'development' 카테고리의 다른 글
snprintf ()는 항상 null로 종료됩니까? (0) | 2020.10.27 |
---|---|
pip는 패키지를 성공적으로 설치하지만 명령 줄에서 찾을 수없는 실행 파일 (0) | 2020.10.27 |
Windows 양식 응용 프로그램에서 많은 컨트롤이있는 패널 컨트롤에 스크롤바를 추가하는 방법은 무엇입니까? (0) | 2020.10.27 |
왜 파이썬 모듈은 때때로 하위 모듈을 가져 오지 않습니까? (0) | 2020.10.27 |
ASP.NET 정적 변수의 수명 (0) | 2020.10.27 |