如何在Python中加密和解密資料

zhongpeijiaoyu發表於2020-08-07

  加密是對資訊進行編碼的過程,只有授權方才能訪問它。這一點至關重要,因為它可以安全地保護您不希望任何人看到或訪問的資料。在本文中,您將學習如何使用Python使用加密 庫對檔案或任何位元組物件,也包括字串物件進行加密。我們將使用對稱加密,這意味著用於加密資料的相同金鑰也可用於解密。那裡有很多加密演算法,我們將使用的庫是基於AES演算法構建的。

  注意:瞭解加密和雜湊演算法之間的區別很重要 ,在加密中,一旦擁有金鑰,您就可以檢索原始資料,而在 雜湊函式中則不能,因此,它們被稱為單向加密。

  讓我們從安裝加密開始:

  pip3 install cryptography

  開啟一個新的Python檔案,讓我們開始吧:

  from cryptography.fernet import Fernet

  生成金鑰

  Fernet是對稱身份驗證密碼技術的實現,讓我們首先生成該金鑰並將其寫入檔案:

  def write_key():

  “””

  Generates a key and save it into a file

  “””

  key = Fernet.generate_key()

  with open(“key.key”, “wb”) as key_file:www.zpedu.com/

  key_file.write(key)

  generate_key()函式生成一個新的Fernet金鑰,您確實需要將其儲存在安全的地方,如果丟失了金鑰,您將不再能夠解密使用此金鑰加密的資料。

  由於此金鑰是唯一的,因此我們不會在每次加密任何內容時生成金鑰,因此我們需要一個函式來為我們載入該金鑰:

  def load_key():

  “””

  Loads the key from the current directory named key.key

  “””

  return open(“key.key”, “rb”).read()

  字串加密

  現在我們知道了如何獲取金鑰,讓我們從加密字串物件開始,只是為了讓您首先熟悉它。

  生成金鑰並將其寫入檔案:

  # generate and write a new key

  write_key()

  讓我們載入該金鑰:

  # load the previously generated key

  key = load_key()

  一些訊息:

  message = “some secret message”.encode()

  我們需要對字串進行編碼,以將其轉換為適合加密的位元組,encode()方法使用utf-8編解碼器對該字串進行編碼。使用該鍵初始化Fernet類:

  # initialize the Fernet class

  f = Fernet(key)

  加密訊息:

  # encrypt the message

  encrypted = f.encrypt(message)

  f.encrypt()方法對傳遞的資料進行加密,這種加密的結果稱為“ Fernet令牌”,並具有強大的隱私性和真實性保證。

  讓我們看看它的外觀:

  # print how it looks

  print(encrypted)

  輸出: b’gAAAAABdjSdoqn4kx6XMw_fMx5YT2eaeBBCEue3N2FWHhlXjD6JXJyeELfPrKf0cqGaYkcY6Q0bS22ppTBsNTNw2fU5HVg-c-0o-KVqcYxqWAIG-LVVI_1U=’

  解密:

  decrypted_encrypted = f.decrypt(encrypted)

  print(decrypted_encrypted)

  b’some secret message’

  的確是同一條資訊。

  f.decrypt()方法解密Fernet令牌。成功解密後,這將返回原始明文作為結果,否則將引發異常。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章