首页 > 其他分享 >10.24

10.24

时间:2024-10-23 19:33:29浏览次数:1  
标签:10.24 String DES IDEA Cipher import 加密算法

实验3:工厂方法模式
本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:
1、理解工厂方法模式的动机,掌握该模式的结构;
2、能够利用工厂方法模式解决实际问题。

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

  1. 画出对应的类图;

  2. 提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;
    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();
}

}

3.注意编程规范。

标签:10.24,String,DES,IDEA,Cipher,import,加密算法
From: https://www.cnblogs.com/wlxdaydayup/p/18498135

相关文章

  • 10.24
    一.填空题(共3题,60分)(填空题)支持向量到超平面的距离之和称之为。我的答案:(1)间隔(填空题)支持向量机的核心思想是(最大化/最小化)间隔。我的答案:(1)最大化(填空题)函数可以作为核函数。我的答案:(1)满足Mercer定理条件......
  • 2022.10.24
    练习情况P8593「KDOI-02」一个弹的投题目拆分为两个问题,一个是求每个炸弹的威力,另一个是求最多减少多少威力。根据物理知识可知,当且仅当\(y_i=y_j\)时,这两枚导弹才有可能相遇。将落地点离散化。使用权值树状数组求逆序对。Code:P8593CF1311FMovingPoints将速度离散......
  • 【闲话】01.10.24
    0110闲话头图:今日推歌:LonPi《绣球花feat.歌爱雪》前奏特别特别伟大,,,是与你十分相称的绣球花啊例行学术:关于\(Kruskal\)判环我23年10月的一点新理解:用\(fa\_u\)和\(fa\_v\)记录\(e[i]\)这条边所在链的两个端点。如:1-2-3-4-5-6-7这条链,假设\(e[3]\)是......
  • 10.24
    packagecom.itheima.mybatisdatabaseexample.pojo;importlombok.AllArgsConstructor;importlombok.Data;importlombok.NoArgsConstructor;importjava.time.LocalDate;importjava.time.LocalDateTime;@Data@AllArgsConstructor@NoArgsConstructorpublicclass......
  • 10.24随笔
    逻辑运算And:与同时满足两个条件的值。Select*fromempwheresal>2000andsal<3000;查询EMP表中SAL列中大于2000小于3000的值。Or:或满足其中一个条件的值Select*fromempwheresal>2000orcomm>500;查询emp表中SAL大于2000或COMM大于500......
  • 10.24
    今日学习内容<%@pageimport="java.sql.PreparedStatement"%><%@pageimport="java.sql.*"%><%@pageimport="java.sql.DriverManager"%><%--CreatedbyIntelliJIDEA.TochangethistemplateuseFile|Settings......
  • 大二快乐日记10.24
    3.@WebServlet实现多重映射Servlet3.0增加了对@WebServlet注解的支持,我们可以在urlPatterns属性中,以字符串数组的形式指定一组映射规则来实现Servlet的多重映射。以servletDemo为例,在@WebServlet注解的urlPatterns属性中添加一组虚拟路径,代码如下。纯文本复制pac......
  • Linux第四章文件权限 2023.10.24
    1、UGO设置文件属性与权限chown:修改文件属主,属性chgrp:修改文件属组chmod:修改文件权限 用法例如(1)chownqfedufile2;chownqfedu02.linuxfile2(2)chgrplinux02file2(3)  1、chmodu+xfile  2、chmodu=rwxfile  3、chmod721file2、基本权限ACL(1)使用get......
  • 10.24
    跟着模板敲代码(1)项目的架构 Dao为数据持久层,用于实现数据库的增删改查entity为javabean用于封装数据库中的对象servlet为前端数据的处理层jsp为前端页面现在来一个个实现 BaseDao用于链接mysql数据库publicclassBaseDao{static{try{C......
  • 每日总结10.24
    今天是一个充实的学习日,我早上开始了算法与数据结构的课程,这门课程涵盖了许多重要的计算机科学概念。今天,我们深入研究了树和生成树的概念,这是算法和数据结构中的关键主题。学习了树的基本结构和性质,以及如何使用树来解决各种计算问题。我还学到了一些巧妙的解题方法,这些方法在算......