Pythonを使用してファイルを暗号化する良い方法は何ですか?


ベストアンサー

pythonでファイルを暗号化するための多くのオプションがあります。

PyCryptoライブラリの使用: PyCryptoは、安全なハッシュ関数とさまざまな暗号化アルゴリズムのコレクションです。 最初にPyCryptoをインストールしますCMDでこのコマンドを実行してパッケージ化する

pip install pycrypto

AESアルゴリズムを使用したファイル暗号化のコードを以下に示します

import os, random, struct

from Crypto.Cipher import AES

def encrypt\_file(key, in\_filename, out\_filename=None, chunksize=64*1024):

""" Encrypts a file using AES (CBC mode) with the

given key.

key:

The encryption key - a string that must be

either 16, 24 or 32 bytes long. Longer keys

are more secure.

in\_filename:

Name of the input file

out\_filename:

If None, ".enc" will be used.

chunksize:

uses to read and encrypt the file. Larger chunk

sizes can be faster for some files and machines.

chunksize must be divisible by 16.

"""

if not out\_filename:

out\_filename = in\_filename + ".enc"

iv = "".join(chr(random.randint(0, 0xFF)) for i in range(16))

encryptor = AES.new(key, AES.MODE\_CBC, iv)

filesize = os.path.getsize(in\_filename)

with open(in\_filename, "rb") as infile:

with open(out\_filename, "wb") as outfile:

outfile.write(struct.pack("

outfile.write(iv)

while True:

chunk = infile.read(chunksize)

if len(chunk) == 0:

break

elif len(chunk) \% 16 != 0:

chunk += " " * (16 - len(chunk) \% 16)

outfile.write(encryptor.encrypt(chunk))

PyAesCryptの使用:AES256-CBCを使用してファイルを暗号化および復号化するPython3ファイル暗号化モジュール

pip install pyAesCrypt

以下に示すサンプルコード:

import pyAesCrypt

# encryption/decryption buffer size - 64K

bufferSize = 64 * 1024

password = "foopassword"

# encrypt

pyAesCrypt.encryptFile("data.txt", "data.txt.aes", password, bufferSize)

# decrypt

pyAesCrypt.decryptFile("data.txt.aes", "dataout.txt", password, bufferSize)

Python暗号化ライブラリも暗号化に適したオプションです

回答

pythonでファイルを暗号化する最も簡単な方法は、暗号化モジュール。

1.インストール:

pip/pip3 install cryptography

2.コード:

「myvideo.mp4」という名前のビデオファイルがありますを暗号化して、メインプログラム“ main.py” を暗号化します。

"""

filename: main.py

author: SANDIPAN CHOWDHURY

purpose: Encrypting any file

This program is posted on Quora on 9th January, 2021

"""

#imports

from cryptography.fernet import Fernet

def sancrypt(filename):

"This function Encrypt the file"

key=Fernet.generate\_key()

key\_master=Fernet(key)

with open (filename,"rb") as f:

data=f.read()

encr\_data=key\_master.encrypt(data)

with open(filename+".sancrypted","wb") as f:

f.write(encr\_data)

with open(filename+".key","wb") as f:

f.write(key)

def desancrypt(filename,keyfilename):

"This function decrypt the filename with keyfilename"

with open(filename,"rb") as f:

encr\_data=f.read()

with open(keyfilename,"rb") as f:

key=f.read()

keymaster=Fernet(key)

decr\_data=keymaster.decrypt(encr\_data)

with open(filename.replace(".sancrypted",""),"wb") as f:

def main():

x=input("""

1. Encrypt

2. Decrypt

Enter a number?

""")

if x=="1":

filename=input("Enter a filename: ")

try:

sancrypt(filename)

print("File Encrypted.")

main()

except Exception as e:

print("File Encryption Failed")

print(str(e))

main()

elif x=="2":

filename=input("Enter filename with ".sancrypted" extension: ")

keyfile=input("Enter filename with ".key" extension: ")

try:

desancrypt(filename,keyfile)

print("File Decrypted.")

main()

except Exception as e:

print("Decryption Failed.")

print(str(e))

main()

else:

print("Invalid Input. Must be 1 or 2")

main()

if \_\_name\_\_=="\_\_main\_\_":

main()

常に正しいキーファイルを使用して正しいデータファイル、どちらかは確かに失敗します。このプログラムを書くのに約30分かかります。私の答えに賛成してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です