加密和解密是一種加密過程,通過使用加密密鑰將敏感信息轉換為不可讀格式(密文),然后使用解密密鑰逆轉過程將其恢復為原始可讀格式(明文),從而確保敏感信息的安全和保護。
加密:
加密涉及將明文數據轉換為密文,使未經授權的個人或實體無法理解。這一過程是通過使用加密算法和加密密鑰來實現的。其目的是確保即使加密數據被未授權方截獲或訪問,他們也無法在沒有解密密鑰的情況下理解其內容。
解密:
解密是加密的逆過程。它涉及將密文轉換回原始的明文形式。為了解密密文,需要使用相應的解密算法和解密密鑰。獲得解密密鑰訪問權限的授權后方可以逆轉加密過程,并恢復原始數據。
這些過程在確保各種情況下的數據安全和保密性方面發揮著至關重要的作用,例如:
- 數據傳輸:在將數據通過網絡(如互聯網)發送之前對其進行加密,有助于防止竊聽和數據攔截。
- 數據存儲:加密存儲可確保數據在物理存儲設備丟失、被盜或損壞的情況下免遭未經授權的訪問。
- 身份驗證:加密通常用于身份驗證機制,以確保憑證、令牌和其他敏感信息的安全。
- 數字簽名:加密用于創建數字簽名,以驗證數字文件或信息的真實性和完整性。
- 安全通信:加密通信渠道(如HTTPS)可確保用戶瀏覽器和網絡服務器之間交換的數據安全。
現代加密技術包括對稱密鑰加密(使用相同的密鑰進行加密和解密)和非對稱密鑰加密(使用一對密鑰:公開密鑰和私人密鑰)。
對稱密鑰加密:
對稱密鑰加密是一種加密技術,數據的加密和解密都使用相同的密鑰。換句話說,發送方和接收方共享同一密鑰。這一過程包括使用加密密鑰將明文數據轉換為密文,然后使用相同的密鑰進行解密,逆轉過程以獲得原始明文。
對稱密鑰解密:
對稱密鑰解密是使用加密時所使用的相同密鑰將加密數據(即密文)轉換回原始明文形式的過程。在對稱加密技術中,加密和解密都使用相同的密鑰。
非對稱密鑰加密:
非對稱密鑰加密又稱公鑰加密,是一種使用一對密鑰(公鑰和私鑰)來確保通信安全和保護數據的加密技術。對稱加密在加密和解密時使用相同的密鑰,而非對稱加密則不同,在這兩個過程中使用不同的密鑰。
非對稱密鑰解密:
非對稱密鑰解密是非對稱加密的一部分,在其中使用一對密鑰:用于加密的公鑰和用于解密的私鑰。公鑰可以公開共享,而私鑰必須保密。在此過程中,使用相應公鑰加密的數據只能使用私鑰解密。
實現對稱密鑰加密的Python/ target=_blank class=infotextkey>Python代碼:
圖片
對稱密鑰加密代碼解析:
import boto3和import os:導入必要的庫,Boto3用于與AWS交互,os用于操作系統相關的操作。
region_name = '<aws-region-name>'和kms_key_id = '<kms-key>':設置用于加密的AWS區域名稱和KMS密鑰ID。將<aws-region-name>和<kms-key>替換為實際值。
input_file_name = '<path-to-input-csv-file>'和output_file_name = '<path-to-store-the-output-encrypted-file>':指定要加密的輸入文件的路徑和存儲加密輸出的路徑。
kms_client = boto3.client('kms', region_name=region_name):為指定的AWS區域初始化KMS客戶端對象。
with open(input_file_name, 'rb') as input_file:以二進制模式('rb')打開輸入文件進行讀取。
input_data = input_file.read():將輸入文件(明文數據)的內容讀取到input_data變量中。
response = kms_client.encrypt(...):使用指定的KMS密鑰(kms_key_id)加密input_data。從響應中獲取加密數據。
encrypted_data = response['CiphertextBlob']:從響應中提取加密數據(密文)。
with open(output_file_name, 'wb') as output_file:以二進制模式('wb')打開一個新文件進行寫入。
output_file.write(encrypted_data):將加密數據(來自encrypted_data變量)寫入輸出文件。
實現對稱密鑰解密的Python代碼:
圖片
對稱密鑰解密代碼解析:
import boto3:導入Boto3庫,這是Python的AWS SDK。
region_name = '<aws-region-name>'和kms_key_id = '<kms-key>':設置用于解密的AWS區域名稱和KMS密鑰ID。將<aws-region-name>和<kms-key>替換為實際值。
input_file_name = '<path-of-the-encrypted-file>'和output_file_name = '<path-to-store-the-decrypted-file>':指定加密的輸入文件和解密的輸出文件的路徑。
kms_client = boto3.client('kms', region_name=region_name):為指定的AWS區域初始化KMS客戶端對象。
with open(input_file_name, 'rb') as input_file:以二進制模式('rb')打開加密的輸入文件進行讀取。
encrypted_data = input_file.read():將加密輸入文件(密文)的內容讀取到encrypted_data變量中。
response = kms_client.decrypt(...):使用指定的KMS密鑰(kms_key_id)解密encrypted_data。從響應中獲取解密數據。
decrypted_data = response['PlAIntext']:從響應中提取解密數據(明文)。
with open(output_file_name, 'wb') as output_file:以二進制模式('wb')打開一個新文件進行寫入。
output_file.write(decrypted_data):將解密數據(來自decrypted_data變量)寫入輸出文件。
decrypted_data = response['Plaintext']:再次將解密數據賦值給decrypted_data變量。
print(decrypted_data.decode('utf-8')):將解密數據解碼為UTF-8格式并打印到控制臺上。
實現非對稱密鑰加密的Python代碼:
圖片
非對稱密鑰加密代碼解析:
import boto3:導入Boto3庫,這是用于Python的AWS SDK。
kms = boto3.client('kms', region_name='<aws-region>'):為指定的AWS區域設置一個KMS客戶端對象。將<aws-region>替換為所需的AWS區域。
key_id = '<public-key-from-aws-kms>':指定將用于加密的公鑰的ID。你需要用AWS KMS中的實際密鑰ID替換此處。
response = kms.get_public_key(KeyId=key_id):檢索與指定密鑰ID相關聯的公鑰。
public_key = response['PublicKey']:從響應中提取公鑰內容。
with open('<path-of-file-to-encrypt>', 'rb') as f:以二進制模式('rb')打開要加密的文件以供讀取。將<path-of-file-to-encrypt>替換為實際的文件路徑。
data = f.read():將要加密的文件內容讀取到數據變量中。
encrypted_data = kms.encrypt(...):使用公鑰(public_key)和指定的加密算法(RSAES_OAEP_SHA_1)對數據進行加密。加密后的數據存儲在encrypted_data變量中。
with open('<path-to-store-encrypted-file>', 'wb') as f:以二進制模式('wb')打開一個新文件以供寫入加密數據。將<path-to-store-encrypted-file>替換為存儲加密文件的目標路徑。
f.write(encrypted_data['CiphertextBlob']):將加密的密文(來自encrypted_data變量)寫入新文件。
實現非對稱密鑰解密的Python代碼:
圖片
非對稱密鑰解密代碼解析:
import boto3:導入Boto3庫,這是用于Python的AWS SDK。
kms = boto3.client('kms', region_name='<aws-region>'):為指定的AWS區域設置一個KMS客戶端對象。將<aws-region>替換為所需的AWS區域。
key_id = '<private-key-from-aws-kms>':指定將用于解密的私鑰的ID。你需要用AWS KMS中的實際密鑰ID替換此處。
with open('<path-of-encrypted-file>', 'rb') as f:以二進制模式('rb')打開加密文件以供讀取。將<path-of-encrypted-file>替換為實際的文件路徑。
encrypted_data = f.read():將加密文件的內容讀取到encrypted_data變量中。
decrypted_data = kms.decrypt(...):使用由key_id指定的私鑰對encrypted_data進行解密。解密后的數據存儲在decrypted_data變量中。
with open('<path-to-store-decrypted-file>', 'wb') as f:以二進制模式('wb')打開一個新文件以供寫入解密數據。將<path-to-store-decrypted-file>替換為存儲解密文件的目標路徑。
f.write(decrypted_data['Plaintext']):將解密的明文(來自decrypted_data變量)寫入新文件。