📜  使用Python加密和解密文件

📅  最后修改于: 2022-05-13 01:55:39.421000             🧑  作者: Mango

使用Python加密和解密文件

加密是对消息进行解码的行为,以便预期用户只能看到它。我们加密数据是因为我们不希望任何人看到或访问它。

我们将使用加密库来加密文件。加密库使用对称算法来加密文件。在对称算法中,我们使用相同的密钥来加密和解密文件。密码学包的fernet模块具有用于分别使用encrypt()decrypt()方法生成密钥、将明文加密为密文以及将密文解密为明文的内置函数。 fernet模块保证使用它加密的数据在没有密钥的情况下无法被进一步操纵或读取。

我们将使用 nba.csv 文件来执行所有操作。

安装:

可以使用以下命令安装加密库:

pip install cryptography

生成密钥以加密文件

密码学库中,有一种密码学算法叫做fernet 。我们将使用fernet模块来加密文件。

Python3
# import required module
from cryptography.fernet import Fernet


Python3
# key generation
key = Fernet.generate_key()
  
# string the key in a file
with open('filekey.key', 'wb') as filekey:
   filekey.write(key)


Python3
# opening the key
with open('filekey.key', 'rb') as filekey:
    key = filekey.read()
  
# using the generated key
fernet = Fernet(key)
  
# opening the original file to encrypt
with open('nba.csv', 'rb') as file:
    original = file.read()
      
# encrypting the file
encrypted = fernet.encrypt(original)
  
# opening the file in write mode and 
# writing the encrypted data
with open('nba.csv', 'wb') as encrypted_file:
    encrypted_file.write(encrypted)


Python3
# using the key
fernet = Fernet(key)
  
# opening the encrypted file
with open('nba.csv', 'rb') as enc_file:
    encrypted = enc_file.read()
  
# decrypting the file
decrypted = fernet.decrypt(encrypted)
  
# opening the file in write mode and
# writing the decrypted data
with open('nba.csv', 'wb') as dec_file:
    dec_file.write(decrypted)


生成密钥并保存:

蟒蛇3

# key generation
key = Fernet.generate_key()
  
# string the key in a file
with open('filekey.key', 'wb') as filekey:
   filekey.write(key)

上面的代码将生成一个名为filekey.key的文件。该文件将包含一行,它是一个充当密钥的字符串,即J64ZHFpCWFlS9zT7y5zxuQN1Gb09y7cucne_EhuWyDM=

使用生成的密钥加密文件

现在我们有一个加密的密钥和要加密的文件。现在编写代码来加密这个文件:

  1. 打开包含密钥的文件。
  2. 初始化Fernet对象并将其存储在fernet变量中。
  3. 读取原始文件。
  4. 加密文件并将其存储到对象中。
  5. 然后将加密数据写入同一个文件nba.csv

蟒蛇3

# opening the key
with open('filekey.key', 'rb') as filekey:
    key = filekey.read()
  
# using the generated key
fernet = Fernet(key)
  
# opening the original file to encrypt
with open('nba.csv', 'rb') as file:
    original = file.read()
      
# encrypting the file
encrypted = fernet.encrypt(original)
  
# opening the file in write mode and 
# writing the encrypted data
with open('nba.csv', 'wb') as encrypted_file:
    encrypted_file.write(encrypted)

执行上述程序前的nba.csv文件:

执行上述程序后的nba.csv文件:

解密加密文件

我们必须使用相同的密钥来解密文件:

  1. 初始化Fernet对象并将其存储在fernet变量中。
  2. 读取加密文件。
  3. 解密文件并将其存储到一个对象中。
  4. 然后将解密后的数据写入同一个文件nba.csv。

蟒蛇3

# using the key
fernet = Fernet(key)
  
# opening the encrypted file
with open('nba.csv', 'rb') as enc_file:
    encrypted = enc_file.read()
  
# decrypting the file
decrypted = fernet.decrypt(encrypted)
  
# opening the file in write mode and
# writing the decrypted data
with open('nba.csv', 'wb') as dec_file:
    dec_file.write(decrypted)

执行上述程序前的nba.csv文件:

执行上述程序后的nba.csv文件: