11.11

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

package jiami;

// Method接口
interface Method {
    String work(String input);
}
package jiami;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;
import java.util.Base64;

// IDEA加密算法实现 (示例中模拟实现,实际Java标准库不直接支持IDEA)
class IDEA implements Method {
    // 为了简化,这里将 IDEA 的实现与 DES 类似进行模拟
    private SecretKey secretKey;

    public IDEA() {
        try {
            KeyGenerator keyGen = KeyGenerator.getInstance("AES"); // 使用AES代替
            keyGen.init(128, new SecureRandom());
            this.secretKey = keyGen.generateKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String work(String input) {
        try {
            Cipher cipher = Cipher.getInstance("AES");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedData = cipher.doFinal(input.getBytes());
            return Base64.getEncoder().encodeToString(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
package jiami;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.security.SecureRandom;
import java.util.Base64;
// DES加密算法实现
class DES implements Method {
    private SecretKey secretKey;

    public DES() {
        try {
            KeyGenerator keyGen = KeyGenerator.getInstance("DES");
            keyGen.init(56, new SecureRandom());
            this.secretKey = keyGen.generateKey();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public String work(String input) {
        try {
            Cipher cipher = Cipher.getInstance("DES");
            cipher.init(Cipher.ENCRYPT_MODE, secretKey);
            byte[] encryptedData = cipher.doFinal(input.getBytes());
            return Base64.getEncoder().encodeToString(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
package jiami;

// 工厂接口MethodFactory
interface MethodFactory {
    Method produceMethod();
}
package jiami;

// IDEA工厂类
class IDEAFactory implements MethodFactory {
    @Override
    public Method produceMethod() {
        return new IDEA();
    }
}
package jiami;

// DES工厂类
class DESFactory implements MethodFactory {
    @Override
    public Method produceMethod() {
        return new DES();
    }
}
package jiami;
import java.util.Scanner;

// 客户端类
public class Client {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 选择加密算法
        System.out.println("请选择加密算法 (输入 1 表示 DES,输入 2 表示 IDEA):");
        int choice = scanner.nextInt();
        scanner.nextLine(); // 清除缓冲区
        
        MethodFactory factory;
        if (choice == 1) {
            factory = new DESFactory();
        } else if (choice == 2) {
            factory = new IDEAFactory();
        } else {
            System.out.println("无效的选择!");
            return;
        }

        // 创建加密实例
        Method method = factory.produceMethod();
        
        // 输入需要加密的数据
        System.out.println("请输入要加密的文本:");
        String input = scanner.nextLine();
        
        // 加密并输出结果
        String encryptedText = method.work(input);
        System.out.println("加密结果为:" + encryptedText);
        
        scanner.close();
    }
}
 
 



posted @   aallofitisst  阅读(7)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示