Pythonでパスワード付きZIPファイルを作成する方法【初心者向け解説】

Python

ファイルの安全な共有やバックアップに便利なZIPファイル。その中でも「パスワード付きZIPファイル」は、データを安全に保護する手段として非常に有用です。
今回は、Pythonを使ってパスワード付きZIPファイルを作成する方法を解説します。Pythonには便利なライブラリが多数用意されており、特別な環境を構築することなく、簡単に高度な処理が可能です。

この記事では、以下の内容を詳しく解説します。

  1. パスワード付きZIPファイルを作成する利点
  2. 必要なPythonライブラリのインストール方法
  3. 実際のコードの説明と実行結果
  4. 応用例や注意点

1. パスワード付きZIPファイルを作成する利点

通常のZIPファイルにパスワードを設定することで、以下のようなメリットが得られます。

  • セキュリティの向上: ファイル内容が第三者に見られるリスクを軽減します。
  • データの安全な共有: パスワードを別途共有することで、データを安全に送信可能です。
  • コンプライアンスの遵守: 個人情報や機密データの保護を求められる状況でも活用できます。

Pythonを使えば、これらの利点を簡単に実現できます。

2. 必要なPythonライブラリのインストール方法

必要なライブラリ

今回使用するライブラリは以下の通りです。

  • pyzipper: パスワード付きZIPファイルを作成するためのライブラリ。AES暗号化をサポート。
  • secrets: 強力なランダムパスワードを生成するための標準ライブラリ。
  • os: ファイルやフォルダを操作するための標準ライブラリ。

pyzipperのインストール

pyzipperをインストールするには、以下のコマンドを実行してください。

pip install pyzipper

インストールが完了したら、以下のコードでライブラリが正しくインポートされるか確認しましょう。

import pyzipper
print("pyzipper is installed and ready to use!")

エラーが表示されなければ、準備完了です。

3. 実際のコードの説明と実行結果

ここからは、実際のコードを段階的に解説します。最終的には、フォルダ内のすべてのファイルをパスワード付きZIPに圧縮し、パスワードをテキストファイルに出力するスクリプトを完成させます。

コード全体

以下が完成版のコードです。

import os
import pyzipper
import secrets
import string

def generate_strong_password(length=16):
    """強力なパスワードを生成する関数"""
    characters = string.ascii_letters + string.digits + string.punctuation
    password = ''.join(secrets.choice(characters) for _ in range(length))
    return password

def compress_to_password_zip(folder_path, output_zip, password_file):
    """フォルダ内のファイルをパスワード付きZIPに圧縮し、パスワードを保存する"""
    # 強力なパスワードを生成
    password = generate_strong_password().encode('utf-8')  # バイト形式に変換

    # ZIPファイルの作成
    with pyzipper.AESZipFile(output_zip, 'w', compression=pyzipper.ZIP_LZMA) as zipf:
        zipf.setpassword(password)
        zipf.setencryption(pyzipper.WZ_AES, nbits=256)  # AES 256ビット暗号化

        for root, _, files in os.walk(folder_path):
            for file in files:
                file_path = os.path.join(root, file)
                arcname = os.path.relpath(file_path, folder_path)  # ZIP内での相対パス
                zipf.write(file_path, arcname=arcname)

    # パスワードをテキストファイルに保存
    with open(password_file, 'w') as f:
        f.write(f"Password for {output_zip}:\n{password.decode('utf-8')}")

    print(f"ZIPファイル: {output_zip}")
    print(f"パスワードファイル: {password_file}")
    print(f"パスワード: {password.decode('utf-8')}")

# 使用例
folder_path = "path/to/your/folder"  # 圧縮したいフォルダのパス
output_zip = "output/protected.zip"  # 出力するZIPファイル名
password_file = "output/password.txt"  # パスワードを保存するテキストファイル名

compress_to_password_zip(folder_path, output_zip, password_file)

コードの動作

  1. パスワードの生成:
    • generate_strong_password関数を使って16文字のランダムパスワードを生成します。
    • 英字(大小)、数字、記号を含むパスワードが生成されます。
  2. ZIPファイルの作成:
    • pyzipper.AESZipFileを使用して、AES 256ビット暗号化付きのZIPファイルを作成します。
    • フォルダ内のすべてのファイルがZIPに追加されます。
  3. パスワードの保存:
    • 生成したパスワードをテキストファイルに保存します。

実行結果

  • 圧縮対象フォルダ:example_folder
  • 出力ZIPファイル:output/protected.zip
  • 出力パスワードファイル:output/password.txt

実行後、以下のような出力が得られます。

ZIPファイル: output/protected.zip
パスワードファイル: output/password.txt
パスワード: !X$29s9N#l2mTq@D

4. 応用例や注意点

応用例

  • 複数フォルダを一括処理: スクリプトを拡張して、複数のフォルダを一度に圧縮することも可能です。
  • 自動メール送信: 生成したZIPファイルとパスワードをメールで送信する機能を追加すると便利です。

注意点

  • パスワードの管理: パスワードを安全に保管することが重要です。誤って紛失するとファイルを復元できません。
  • セキュリティ対策: パスワードを第三者と共有する際は、安全な方法(例:暗号化されたメッセージングアプリ)を使用してください。

まとめ

この記事では、Pythonを使ってパスワード付きZIPファイルを作成する方法を解説しました。今回の方法を活用すれば、セキュリティを保ちながらデータを共有・保管できます。ぜひ、業務やプライベートで試してみてください!

コメント

タイトルとURLをコピーしました