pythonフォルダ暗号化
解決したいこと
pythonにて、フォルダごと暗号化したいのです🔐
発生している問題・エラー
ネット上の色々なページを見ていたのですが、イマイチ説明が難しく(暗号化初心者です)、どなたか分かりやすい説明をお願いします🙇♀️
例)
概要
python、.keyファイルを用いた暗号化
⭐︎ファイルでは無く、フォルダごとの暗号化を考えています
サンプルコード付きの方大歓迎です。
0 likes
pythonにて、フォルダごと暗号化したいのです🔐
ネット上の色々なページを見ていたのですが、イマイチ説明が難しく(暗号化初心者です)、どなたか分かりやすい説明をお願いします🙇♀️
例)
python、.keyファイルを用いた暗号化
⭐︎ファイルでは無く、フォルダごとの暗号化を考えています
サンプルコード付きの方大歓迎です。
ググるといくつか出てきますが、
例えば、次の記事は参考になりませんか?
ファイルでは無く、フォルダごとの暗号化を考えています
というのは、どのようなイメージですか?
@PythonLove
Questioner
フォルダの中に入っているファイルを全て暗号化したい、という感じです。説明が分かりづらく申し訳ございません。
できないポイントをもう少し具体的に説明いただけますか。
また、途中まで書いたコードがあるとアドバイスしやすいですね。
暗号化についてですが、1つのファイルであれば暗号化することができますか?
@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)
暗号化したいフォルダーを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)
@PythonLove
Questioner
返答遅くなり、大変申し訳ございません。
本当に助かりました!ありがとうございます!!