工厂方法模式

 

1、理解工厂方法模式的动机,掌握该模式的结构;

2、能够利用工厂方法模式解决实际问题

 

[实验任务一]:加密算法

目前常用的加密算法有DES(Data Encryption Standard)和IDEA(International Data Encryption Algorithm)国际数据加密算法等,请用工厂方法实现加密算法系统。

1. 类图

 

 

依赖命令pip install pycryptodome

from abc import ABC, abstractmethod

from Crypto.Cipher import DES, IDEA

 

 

# 抽象加密器类

class Encryptor(ABC):

    @abstractmethod

    def encrypt(self, data):

        pass

 

    @abstractmethod

    def decrypt(self, encrypted_data):

        pass

 

 

# DES加密器类

class DESEncryptor(Encryptor):

    def __init__(self, key):

        self.key = key

        self.des = DES.new(self.key, DES.MODE_ECB)

 

    def encrypt(self, data):

        data = data + b' ' * (8 - len(data) % 8)

        return self.des.encrypt(data)

 

    def decrypt(self, encrypted_data):

        return self.des.decrypt(encrypted_data).rstrip()

 

 

# IDEA加密器类

class IDEAEncryptor(Encryptor):

    def __init__(self, key):

        self.key = key

        self.idea = IDEA.new(self.key, IDEA.MODE_ECB)

 

    def encrypt(self, data):

        data = data + b' ' * (8 - len(data) % 8)

        return self.idea.encrypt(data)

 

    def decrypt(self, encrypted_data):

        return self.idea.decrypt(encrypted_data).rstrip()

 

 

# 加密器工厂类

class EncryptorFactory:

    @staticmethod

    def create_encryptor(algorithm_type, key):

        if algorithm_type == 'DES':

            return DESEncryptor(key)

        elif algorithm_type == 'IDEA':

            return IDEAEncryptor(key)

key = b'12345678'

data = b'Hello, World!'

 

# 使用DES加密

des_encryptor = EncryptorFactory.create_encryptor('DES', key)

encrypted_data_des = des_encryptor.encrypt(data)

decrypted_data_des = des_encryptor.decrypt(encrypted_data_des)

print("DES加密后:", encrypted_data_des)

print("DES解密后:", decrypted_data_des)

 

# 使用IDEA加密

idea_encryptor = EncryptorFactory.create_encryptor('IDEA', key)

encrypted_data_idea = idea_encryptor.encrypt(data)

decrypted_data_idea = idea_encryptor.decrypt(encrypted_data_idea)

print("IDEA加密后:", encrypted_data_idea)

print("IDEA解密后:", decrypted_data_idea)

posted @ 2024-10-23 19:35  艾鑫4646  阅读(9)  评论(0编辑  收藏  举报