- 密碼學教程
- 密碼學 - 首頁
- 密碼學 - 起源
- 密碼學 - 歷史
- 密碼學 - 原理
- 密碼學 - 應用
- 密碼學 - 優點與缺點
- 密碼學 - 現代密碼學
- 密碼學 - 傳統密碼
- 密碼學 - 加密的需求
- 密碼學 - 雙重強度加密
- 密碼系統
- 密碼系統
- 密碼系統 - 組成部分
- 密碼系統攻擊
- 密碼系統 - 彩虹表攻擊
- 密碼系統 - 字典攻擊
- 密碼系統 - 暴力攻擊
- 密碼系統 - 密碼分析技術
- 密碼學型別
- 密碼系統 - 型別
- 公鑰加密
- 現代對稱金鑰加密
- 密碼學雜湊函式
- 金鑰管理
- 密碼系統 - 金鑰生成
- 密碼系統 - 金鑰儲存
- 密碼系統 - 金鑰分發
- 密碼系統 - 金鑰吊銷
- 分組密碼
- 密碼系統 - 流密碼
- 密碼學 - 分組密碼
- 密碼學 - Feistel分組密碼
- 分組密碼的工作模式
- 分組密碼的工作模式
- 電子密碼本 (ECB) 模式
- 密碼分組連結 (CBC) 模式
- 密碼反饋 (CFB) 模式
- 輸出反饋 (OFB) 模式
- 計數器 (CTR) 模式
- 經典密碼
- 密碼學 - 反向密碼
- 密碼學 - 凱撒密碼
- 密碼學 - ROT13演算法
- 密碼學 - 置換密碼
- 密碼學 - 加密置換密碼
- 密碼學 - 解密置換密碼
- 密碼學 - 乘法密碼
- 密碼學 - 仿射密碼
- 密碼學 - 簡單替換密碼
- 密碼學 - 簡單替換密碼加密
- 密碼學 - 簡單替換密碼解密
- 密碼學 - 維吉尼亞密碼
- 密碼學 - 維吉尼亞密碼的實現
- 現代密碼
- Base64編碼與解碼
- 密碼學 - XOR加密
- 替換技術
- 密碼學 - 單字母替換密碼
- 密碼學 - 單字母替換密碼的破解
- 密碼學 - 多字母替換密碼
- 密碼學 - Playfair密碼
- 密碼學 - Hill密碼
- 多字母替換密碼
- 密碼學 - 一次性密碼本密碼
- 一次性密碼本密碼的實現
- 密碼學 - 置換技術
- 密碼學 - 柵欄密碼
- 密碼學 - 列置換密碼
- 密碼學 -隱寫術
- 對稱演算法
- 密碼學 - 資料加密
- 密碼學 - 加密演算法
- 密碼學 - 資料加密標準 (DES)
- 密碼學 - 三重DES
- 密碼學 - 雙重DES
- 高階加密標準 (AES)
- 密碼學 - AES結構
- 密碼學 - AES變換函式
- 密碼學 - 位元組替換變換
- 密碼學 - 行移位變換
- 密碼學 - 列混淆變換
- 密碼學 - 輪金鑰加變換
- 密碼學 - AES金鑰擴充套件演算法
- 密碼學 - Blowfish演算法
- 密碼學 - SHA演算法
- 密碼學 - RC4演算法
- 密碼學 - Camellia加密演算法
- 密碼學 - ChaCha20加密演算法
- 密碼學 - CAST5加密演算法
- 密碼學 - SEED加密演算法
- 密碼學 - SM4加密演算法
- IDEA - 國際資料加密演算法
- 公鑰(非對稱)密碼演算法
- 密碼學 - RSA演算法
- 密碼學 - RSA加密
- 密碼學 - RSA解密
- 密碼學 - 建立RSA金鑰
- 密碼學 - 破解RSA密碼
- 密碼學 - ECDSA演算法
- 密碼學 - DSA演算法
- 密碼學 - Diffie-Hellman演算法
- 密碼學中的資料完整性
- 密碼學中的資料完整性
- 訊息認證
- 密碼學數字簽名
- 公鑰基礎設施 (PKI)
- 雜湊
- MD5(訊息摘要演算法5)
- SHA-1(安全雜湊演算法1)
- SHA-256(安全雜湊演算法256位)
- SHA-512(安全雜湊演算法512位)
- SHA-3(安全雜湊演算法3)
- 雜湊密碼
- Bcrypt雜湊模組
- 現代密碼學
- 量子密碼學
- 後量子密碼學
- 密碼協議
- 密碼學 - SSL/TLS協議
- 密碼學 - SSH協議
- 密碼學 - IPsec協議
- 密碼學 - PGP協議
- 影像和檔案加密
- 密碼學 - 影像
- 密碼學 - 檔案
- 隱寫術 - 影像
- 檔案加密和解密
- 密碼學 - 檔案加密
- 密碼學 - 檔案解密
- 物聯網中的密碼學
- 物聯網安全挑戰、威脅和攻擊
- 物聯網安全的加密技術
- 物聯網裝置的通訊協議
- 常用的密碼技術
- 自定義構建密碼演算法(混合密碼學)
- 雲密碼學
- 量子密碼學
- 密碼學中的影像隱寫術
- DNA密碼學
- 密碼學中的一次性密碼 (OTP) 演算法
- 區別
- 密碼學 - MD5 vs SHA1
- 密碼學 - RSA vs DSA
- 密碼學 - RSA vs Diffie-Hellman
- 密碼學 vs 密碼學
- 密碼學 - 密碼學 vs 密碼分析
- 密碼學 - 經典 vs 量子
- 密碼學 vs 隱寫術
- 密碼學 vs 加密
- 密碼學 vs 網路安全
- 密碼學 - 流密碼 vs 分組密碼
- 密碼學 - AES vs DES 密碼
- 密碼學 - 對稱 vs 非對稱
- 密碼學有用資源
- 密碼學 - 快速指南
- 密碼學 - 討論
密碼學 - 檔案解密
檔案解密是一種解密方法,它將檔案轉換回明文或可讀資料。使用此方法可確保授權人員可以訪問您的資料,他們可以使用解密金鑰讀取內容。
在本章中,我們將看到不同的解密技術來解密檔案資料。讓我們深入探討。
檔案解密的基本方法
解密是將加密資料更改回其原始可讀形式的過程。以下是檔案解密的一些基本方法:
對稱金鑰解密
單個金鑰用於加密和解密。要解密檔案,請使用與加密檔案時相同的金鑰。解密過程通常涉及使用解密金鑰將加密演算法的逆運算新增到加密資料中。
from cryptography.fernet import Fernet
# Generate a key
key = Fernet.generate_key()
cipher_suite = Fernet(key)
# Read the file
with open('plain_text.txt', 'rb') as f:
plaintext = f.read()
# Encrypt the file
encrypted_text = cipher_suite.encrypt(plaintext)
# Write the encrypted file
with open('encrypted_file.txt', 'wb') as f:
f.write(encrypted_text)
# Print message after file is encrypted
print("File encrypted successfully.")
# Decrypt the file
decrypted_text = cipher_suite.decrypt(encrypted_text)
# Write the decrypted file
with open('decrypted_file.txt', 'wb') as f:
f.write(decrypted_text)
# Print message after file is decrypted
print("File decrypted successfully.")
輸出
File encrypted successfully. File decrypted successfully.
請參見下面的輸出影像,其中顯示了plain_text.txt、encrypted_file.txt和decrypted_file.txt檔案。
非對稱金鑰解密
非對稱金鑰加密需要兩個金鑰:公鑰和私鑰。公鑰用於加密,私鑰用於解密。要解密非對稱加密的檔案,您需要私鑰。非對稱加密通常用於安全通訊和金鑰交換。
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes
# Generate key pair
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048
)
public_key = private_key.public_key()
# Save private key
with open("private.pem", "wb") as f:
f.write(
private_key.private_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PrivateFormat.TraditionalOpenSSL,
encryption_algorithm=serialization.NoEncryption()
)
)
# Save public key
with open("public.pem", "wb") as f:
f.write(
public_key.public_bytes(
encoding=serialization.Encoding.PEM,
format=serialization.PublicFormat.SubjectPublicKeyInfo
)
)
def encrypt_file(file_path, public_key_path, output_path):
# Load public key
with open(public_key_path, "rb") as f:
public_key = serialization.load_pem_public_key(f.read())
# Encrypt file
with open(file_path, "rb") as f:
plaintext = f.read()
ciphertext = public_key.encrypt(
plaintext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Save encrypted file
with open(output_path, "wb") as f:
f.write(ciphertext)
def decrypt_file(file_path, private_key_path, output_path):
# Load private key
with open(private_key_path, "rb") as f:
private_key = serialization.load_pem_private_key(
f.read(),
password=None
)
# Decrypt file
with open(file_path, "rb") as f:
ciphertext = f.read()
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# Save decrypted file
with open(output_path, "wb") as f:
f.write(plaintext)
# Encrypt file
encrypt_file("plain_text.txt", "public.pem", "encrypted_file.bin")
# Decrypt file
decrypt_file("encrypted_file.bin", "private.pem", "decrypted_plaintext.txt")
輸出
使用“python program.py”執行上述程式碼後,它將建立公鑰和私鑰,然後使用公鑰加密名為plain_text.txt的檔案,然後使用私鑰解密加密的檔案。
基於密碼的解密
密碼或密碼短語會建立一個用於加密和解密的金鑰。相同的密碼用於加密和解密資料。要解密受基於密碼的加密保護的檔案,您必須輸入正確的密碼。
from cryptography.fernet import Fernet
# get password from user
password = input("Enter password: ").encode()
# derive key from password
key = Fernet.generate_key()
# create Fernet cipher suite with the derived key
cipher_suite = Fernet(key)
# read the encrypted file
with open('encrypted_file.txt', 'rb') as f:
encrypted_text = f.read()
# decrypt the file
try:
decrypted_text = cipher_suite.decrypt(encrypted_text)
# write the decrypted file
with open('decrypted_file.txt', 'wb') as f:
f.write(decrypted_text)
print("File decrypted successfully.")
except Exception as e:
print("Error decrypting file:", str(e))
輸入/輸出
Enter password: 12345 Error decrypting file:
金鑰派生
某些加密方法使用金鑰派生函式 (KDF) 從密碼或密碼短語生成金鑰。然後使用生成的金鑰進行加密和解密。金鑰派生確保使用相同的密碼建立相同的金鑰,從而允許安全解密。
初始化向量 (IV) 的使用
初始化向量 (IV) 用於加密演算法中,以防止密文與明文相同。解密檔案時,通常需要同時提供 IV 和解密金鑰。IV 通常包含在加密檔案中或與其一起傳送。
廣告