今天來學習對稱式密碼的資料加密標準(Data Encryption Standard,DES)
我後來發現我應該把這篇放在AES之前才對。
這個資料加密標準其實源於美國的1970年代,由美國國家標準局提出徵求適合用於政府機關和商業機構資料的加密演算法,最後選定了IBM公司提交的方案。這也成為後來3DES、IDEA等區塊加密法的原理
它的特性如下:
記得裝pycryptodome
pip install pycryptodome
from Crypto.Cipher import DES
from Crypto.Random import get_random_bytes
def encrypt_des(key, plaintext):
# Create a DES cipher object using the provided key and DES ECB mode
cipher = DES.new(key, DES.MODE_ECB)
# Ensure that the plaintext length is a multiple of the DES block size (8 bytes)
plaintext = plaintext + b"\0" * (8 - len(plaintext) % 8)
# Encrypt the plaintext
ciphertext = cipher.encrypt(plaintext)
return ciphertext
def decrypt_des(key, ciphertext):
# Create a DES cipher object using the provided key and DES ECB mode
cipher = DES.new(key, DES.MODE_ECB)
# Decrypt the ciphertext
plaintext = cipher.decrypt(ciphertext)
# Remove padding null bytes from the decrypted plaintext
plaintext = plaintext.rstrip(b"\0")
return plaintext
# Usage example
if __name__ == "__main__":
key = get_random_bytes(8) # 64-bit DES key
plaintext = b"HELLO!" # The plaintext to encrypt (in bytes)
# Encrypt
ciphertext = encrypt_des(key, plaintext)
print("key",key)
print("Ciphertext:", ciphertext.hex())
# Decrypt
decrypted_text = decrypt_des(key, ciphertext)
print("Decrypted Text:", decrypted_text.decode())
key: b'\x0e,%{\xcc\xd1\x81\x92'
Ciphertext: 0ec84c744dac479f
Decrypted Text: HELLO!
心得:相較於AES可以存放128位元,DES的56位元的就顯得比較小了,不過隨者軟硬體的進步,這種取代也是很正常