@PythonLove

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

pythonフォルダ暗号化

解決したいこと

pythonにて、フォルダごと暗号化したいのです🔐

発生している問題・エラー

ネット上の色々なページを見ていたのですが、イマイチ説明が難しく(暗号化初心者です)、どなたか分かりやすい説明をお願いします🙇‍♀️

例)

概要

python、.keyファイルを用いた暗号化
⭐︎ファイルでは無く、フォルダごとの暗号化を考えています
サンプルコード付きの方大歓迎です。

0 likes

3Answer

ググるといくつか出てきますが、
例えば、次の記事は参考になりませんか?

0Like

ファイルでは無く、フォルダごとの暗号化を考えています

というのは、どのようなイメージですか?

0Like

Comments

  1. @PythonLove

    Questioner

    フォルダの中に入っているファイルを全て暗号化したい、という感じです。説明が分かりづらく申し訳ございません。

  2. できないポイントをもう少し具体的に説明いただけますか。
    また、途中まで書いたコードがあるとアドバイスしやすいですね。

    暗号化についてですが、1つのファイルであれば暗号化することができますか?

  3. @PythonLove

    Questioner

    生成AIに学んだ方法ですが、.keyファイルを用いた方法でしたら分かります。

    import os
    from cryptography.fernet import Fernet
    import numpy as np
    
    # ===== USBキーの設定 =====
    USB_PATH = "F:/secret/"   # USBドライブ(例: Eドライブにフォルダsecretを作成)
    KEY_FILE = os.path.join(USB_PATH, "fernet.key")
    
    # ===== 暗号化 =====
    def encrypt_feature(feature_file, encrypted_file):
        # USBから鍵を読み込む
        with open(KEY_FILE, "rb") as f:
            key = f.read()
        cipher = Fernet(key)
    
        # 特徴量をロード
        feature = np.load(feature_file)
    
        # numpy配列をバイト列に変換
        data = feature.tobytes()
    
        # 暗号化
        encrypted = cipher.encrypt(data)
    
        # 保存
        with open(encrypted_file, "wb") as f:
            f.write(encrypted)
        print("暗号化しました:", encrypted_file)
    
    # ===== 復号化 =====
    def decrypt_feature(encrypted_file, shape, dtype=np.float32):
        with open(KEY_FILE, "rb") as f:
            key = f.read()
        cipher = Fernet(key)
    
        with open(encrypted_file, "rb") as f:
            encrypted = f.read()
    
        # 復号
        decrypted = cipher.decrypt(encrypted)
    
        # numpy配列に戻す
        feature = np.frombuffer(decrypted, dtype=dtype).reshape(shape)
        return feature
    
    
    # ===== サンプル実行 =====
    if __name__ == "__main__":
        # --- 初回のみ: 鍵をUSBに作成 ---
        # generate_key()
    
        # 顔特徴量ファイル例
        original_feature = "001.npy"
        encrypted_file = "face001.enc"
    
        # 1. 暗号化保存
        encrypt_feature(original_feature, encrypted_file)
    
        # 2. 復号して利用
        #    shapeは元の特徴量のshapeを知っている必要あり
        restored = decrypt_feature(encrypted_file, shape=(1, 128))  # 例: dlibやArcFace系の512次元特徴量
        print("復号した特徴量:", restored)
    
  4. 暗号化したいフォルダーをzipで固めてから、そのzip形式に固めたフォルダーを暗号化するアプローチはいかがでしょうか?
    動作環境: Linux
    pythonのバージョン: 3.13.7

    import shutil
    shutil.make_archive('output', 'zip', 'folder') # folderからoutput.zipが作成される
    
    # make_archiveでzip形式に固めたフォルダーの中身を読み込む
    with open("output.zip", "rb") as reader:
        # reader.read()
    

ディレクトリの中にある複数のファイルを順に処理するならこんな感じでしょうか。
(動かしてはいないので、バグあるかもしれません)

import pathlib

source_dir = pathlib.Path('source_dir')

encrypted_dir = pathlib.Path('encripted_dir')
if not encrypted_dir.exists():
    encrypted_dir.mkdir()

source_files = source_dir.glob('*.npy')
for s_file in source_files:
    encrypted_file = encrypted_dir / f'face{s_file.stem}.enc'

    # 1. 暗号化保存
    encrypt_feature(s_file, encrypted_file)

0Like

Comments

  1. @PythonLove

    Questioner

    返答遅くなり、大変申し訳ございません。
    本当に助かりました!ありがとうございます!!

Your answer might help someone💌