DES加解密 in Python
des
python
# poetry add pycryptodome
from Crypto.Cipher import DES
from base64 import b64encode, b64decode
import math
class DES_ECB:
@staticmethod
def _pad(text, block_size):
no_of_blocks = math.ceil(len(text)/float(block_size))
pad_value = int(no_of_blocks * block_size - len(text))
if pad_value == 0:
return text + chr(block_size) * block_size
else:
return text + chr(pad_value) * pad_value
@staticmethod
def _unpad(padded_text):
pad_value = ord(padded_text[-1])
return padded_text[:-pad_value]
def encrypt_as_b64(self, key, plaintext):
size = 8
key = key[:size].encode()
plaintext = self._pad(plaintext, size).encode()
code = DES.new(key, DES.MODE_ECB).encrypt(plaintext)
return b64encode(code).decode()
def decrypt_as_text(self, key, ciphertext):
size = 8
key = key[:size].encode()
ciphertext = b64decode(ciphertext)
decrypted_text = DES.new(key, DES.MODE_ECB).decrypt(ciphertext)
return self._unpad(decrypted_text.decode())
key = "hph3c_z01500"
plaintext = "123456"
des_ecb = DES_ECB()
encrypted_text = des_ecb.encrypt_as_b64(key, plaintext)
print(f"Encrypted: {encrypted_text}")
decrypted_text = des_ecb.decrypt_as_text(key, encrypted_text)
print(f"Decrypted: {decrypted_text}")