Skip to content

Commit 4f280f4

Browse files
author
Andrey Ovsiankin
committed
fixed #152 Добавлена поддержка шифрования ZIP
1 parent c90ff42 commit 4f280f4

File tree

2 files changed

+24
-4
lines changed

2 files changed

+24
-4
lines changed

src/ScriptEngine.HostedScript/Library/Zip/ZipWriter.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,7 @@ public void Open(
5959
_zip.CompressionMethod = MakeZipCompressionMethod(compressionMethod);
6060
_zip.CompressionLevel = MakeZipCompressionLevel(compressionLevel);
6161
_zip.UseZip64WhenSaving = Zip64Option.AsNecessary;
62-
63-
// Zlib падает с NullReferenceException, если задать шифрование
64-
//_zip.Encryption = MakeZipEncryption(encryptionMethod);
62+
_zip.Encryption = MakeZipEncryption(encryptionMethod);
6563
}
6664

6765
private ZipOption ChooseEncodingMode(FileNamesEncodingInZipFile encoding)
@@ -296,14 +294,16 @@ private CompressionLevel MakeZipCompressionLevel(SelfAwareEnumValue<ZipCompressi
296294
private EncryptionAlgorithm MakeZipEncryption(SelfAwareEnumValue<ZipEncryptionMethodEnum> encryptionMethod)
297295
{
298296
if (encryptionMethod == null)
299-
return EncryptionAlgorithm.PkzipWeak;
297+
return EncryptionAlgorithm.None;
300298

301299
var enumOwner = (ZipEncryptionMethodEnum)encryptionMethod.Owner;
302300

303301
if(encryptionMethod == enumOwner.Zip20)
304302
return EncryptionAlgorithm.PkzipWeak;
305303
if (encryptionMethod == enumOwner.Aes128)
306304
return EncryptionAlgorithm.WinZipAes128;
305+
if (encryptionMethod == enumOwner.Aes192)
306+
return EncryptionAlgorithm.Unsupported;
307307
if (encryptionMethod == enumOwner.Aes256)
308308
return EncryptionAlgorithm.WinZipAes256;
309309

tests/zip.os

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
ВсеТесты.Добавить("ТестДолжен_ПроверитьРазмерИзвлеченногоОдиночногоЭлемента");
3030
ВсеТесты.Добавить("ТестДолжен_ПроверитьПарольАрхива");
3131
ВсеТесты.Добавить("ТестДолжен_ПроверитьПарольРусскиеБуквыФайловАрхива");
32+
ВсеТесты.Добавить("ТестДолжен_ПроверитьШифрованиеЗипАрхива");
3233

3334
Возврат ВсеТесты;
3435

@@ -611,6 +612,25 @@
611612
ПроверитьНаличиеФайла(ИскомыйПутьФайла, "Файл должен был существовать в корне распаковки, а его нет.");
612613
КонецПроцедуры
613614

615+
Процедура ТестДолжен_ПроверитьШифрованиеЗипАрхива() Экспорт
616+
617+
Архивируемый = СоздатьФайл();
618+
Архив = ПолучитьИмяВременногоФайла("zip");
619+
ЗаписьZipФайла = Новый ЗаписьZipФайла(Архив, "123", , , , МетодШифрованияZIP.AES256);
620+
ЗаписьZipФайла.Добавить(Архивируемый);
621+
ЗаписьZipФайла.Записать();
622+
623+
УдалитьФайлы(Архивируемый);
624+
625+
ЧтениеZipФайла = Новый ЧтениеZipФайла(Архив, "123");
626+
ЭлементЗашифрован = ЧтениеZipФайла.Элементы[0];
627+
ЧтениеZipФайла.Закрыть();
628+
УдалитьФайлы(Архив);
629+
630+
юТест.ПроверитьИстину(ЭлементЗашифрован);
631+
632+
КонецПроцедуры
633+
614634
Функция УстановитьВременныйКаталогКакТекущий()
615635
ИмяКаталогаКорня = юТест.ИмяВременногоФайла();
616636
СоздатьКаталог(ИмяКаталогаКорня);

0 commit comments

Comments
 (0)