C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

1ファイルのパスワード付きZIP圧縮

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■103868 / inTopicNo.1)  1ファイルのパスワード付きZIP圧縮
  
□投稿者/ furu (243回)-(2025/10/21(Tue) 16:51:16)

分類:[.NET 全般] 

VS2026 C# .NetFramework4.8

久々にZIP圧縮しようとしたら
なかなかいい方法が見つかりません。

・指定した1ファイルを圧縮
・パスワード付きZIPファイル
・自己解凍形式(できなくても可)
・LoadLibraryしない

簡単にできるライブラリややり方あれば教えてください。

DotNetZip
  脆弱性のため、非推奨なんですね
SharpZipLib
  1ファイルのやり方がわからない
引用返信 編集キー/
■103870 / inTopicNo.2)  Re[1]: 1ファイルのパスワード付きZIP圧縮
□投稿者/ 魔界の仮面弁士 (3901回)-(2025/10/21(Tue) 19:56:13)
No103868 (furu さん) に返信
> VS2026 C# .NetFramework4.8

Visual Studio 2026 Insiders ですか?
まだ試してないや…。


> 久々にZIP圧縮しようとしたら
> なかなかいい方法が見つかりません。
7za.exe を Process.Start で呼んだら駄目ですか?

コマンドライン的には
 7za a -tzip -pYourPassword archive.zip target.txt
ですよね。


7-Zip CLI の場合はこんな感じ。

// パスワード付き zip にする方法
var psi = new ProcessStartInfo {
  FileName = "7z.exe",
  Arguments = $"a -tzip -pYourPassword secure.zip target.txt",
  RedirectStandardOutput = true,
  UseShellExecute = false
};
Process.Start(psi);

自己解凍にする場合は バッチ処理的に言えば
 copy /b 7z.sfx + config.txt + archive.7z archive.exe
に相当する追加処理を行うことで実装できます。



別プロセスにしたくないなら、SevenZipSharp ってのもあります(7z.dll 依存)。
ただし AES 暗号化はサポートするものの、AES256 に非対応だったかな。
https://qiita.com/koshian2/items/f648892f37cddaab7093


> SharpZipLib
>   1ファイルのやり方がわからない

こちらは 7z.dll に依存せずに済みますね。

// using ICSharpCode.SharpZipLib.Zip;

string inputFile = @"C:\Sample\圧縮対象ファイル.TXT";
string outputZip = @"C:\Sample\出力先.ZIP";
string password = "YourPassword";

// FileStream の代わりに MemoryStream を使えば、オンメモリで処理することもできる
using (FileStream fsOut = File.Create(outputZip))
using (ZipOutputStream zipStream = new ZipOutputStream(fsOut))
{
  zipStream.SetLevel(9); // 圧縮率(0〜9)
  zipStream.Password = password;
  zipStream.UseZip64 = UseZip64.Off;

  // AES256 暗号化付きエントリを作成
  ZipEntry entry = new ZipEntry(Path.GetFileName(inputFile)) { AESKeySize = 256, DateTime = DateTime.Now };
  zipStream.PutNextEntry(entry); // 複数ファイルを追加する場合は PutNextEntry を繰り返す
  using (FileStream fsIn = File.OpenRead(inputFile))
  {
    fsIn.CopyTo(zipStream);
  }
  zipStream.CloseEntry();
}


有償でも良ければ、他にもいくつかのライブラリがあるみたいです。
引用返信 編集キー/
■103871 / inTopicNo.3)  Re[2]: 1ファイルのパスワード付きZIP圧縮
□投稿者/ furu (244回)-(2025/10/21(Tue) 20:36:48)
No103870 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士さん
ありがとうございます。

>>SharpZipLib
>>  1ファイルのやり方がわからない
>
> こちらは 7z.dll に依存せずに済みますね。
FastZipクラスのサンプルばかりで困っていました。
SharpZipLibで進めてみます。

> ■No103868 (furu さん) に返信
>>VS2026 C# .NetFramework4.8
>
> Visual Studio 2026 Insiders ですか?
> まだ試してないや…。
速くなりましたね。
引用返信 編集キー/
■103872 / inTopicNo.4)  Re[3]: 1ファイルのパスワード付きZIP圧縮
□投稿者/ 魔界の仮面弁士 (3902回)-(2025/10/21(Tue) 21:57:17)
No103871 (furu さん) に返信
>>>SharpZipLib
> FastZipクラスのサンプルばかりで困っていました。
> SharpZipLibで進めてみます。

オンメモリで実装する場合の例もありました。参考までに。
https://qiita.com/snaka/items/e36b1dd0f1b171755533


No103870 (魔界の仮面弁士 さん) に追記
> 自己解凍にする場合は バッチ処理的に言えば
>  copy /b 7z.sfx + config.txt + archive.7z archive.exe
> に相当する追加処理を行うことで実装できます。

自己解凍書庫についてはこちらを参考に。
https://note.com/page10/n/n21c5305d96ad

C# からなら、BinaryWriter.Write 等で繋げていけばよいかと。
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ