首页 > 其他分享 >10.14

10.14

时间:2024-11-27 09:46:54浏览次数:6  
标签:String DES 10.14 Cipher key import public

软件设计的实验

 

实验2:简单工厂模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

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

2、能够利用简单工厂模式解决实际问题。

 
   

 


[实验任务一]:女娲造人

使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数M,则返回一个Man对象,如果传入参数W,则返回一个Woman对象,如果传入参数R,则返回一个Robot对象。请用程序设计实现上述场景。

实验要求:

1.  画出对应的类图;

 

2.  提交源代码

  1. // 定义一个Person接口
    interface Person {
        void display();
    }

    // 实现Person接口的Man
    class Man implements Person {
        @Override
        public void display() {
            System.out.println("I am a man.");
        }
    }

    // 实现Person接口的Woman
    class Woman implements Person {
        @Override
        public void display() {
            System.out.println("I am a woman.");
        }
    }

    // 实现Person接口的Robot
    class Robot implements Person {
        @Override
        public void display() {
            System.out.println("I am a robot.");
        }
    }

    // 简单工厂类
    class Nvwa {
        public Person createPerson(String type) {
            if (type == null) {
                return null;
            }
            if (type.equalsIgnoreCase("M")) {
                return new Man();
            } else if (type.equalsIgnoreCase("W")) {
                return new Woman();
            } else if (type.equalsIgnoreCase("R")) {
                return new Robot();
            } else {
                return null;
            }
        }
    }

    // 测试类
    public class SimpleFactoryPatternDemo {
        public static void main(String[] args) {
            Nvwa nvwa = new Nvwa();

            Person person = nvwa.createPerson("M");
            if (person != null) {
                person.display();
            }

            person = nvwa.createPerson("W");
            if (person != null) {
                person.display();
            }

            person = nvwa.createPerson("R");
            if (person != null) {
                person.display();
            }
        }
    }

 

3.注意编程规范。

软件设计                  石家庄铁道大学信息学院

 

实验3:工厂方法模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

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

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

 
   

 


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

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

实验要求:

1.  画出对应的类图;

 

2.提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class DESEncryption {

    // 生成DES密钥
   
public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.init(56, SecureRandom.getInstanceStrong());
        return keyGenerator.generateKey();
    }

    // DES加密
   
public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // DES解密
   
public static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] data = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(data);
    }

    public static void main(String[] args) {
        try {
            // 生成密钥
           
SecretKey key = generateKey();
            String originalText = "Hello, World!";

            // 加密
           
String encryptedText = encrypt(originalText, key);
            System.out.println("Encrypted Text: " + encryptedText);

            // 解密
           
String decryptedText = decrypt(encryptedText, key);
            System.out.println("Decrypted Text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

3.注意编程规范。

实验3:工厂方法模式

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:

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

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

 
   

 

 

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

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

实验要求:

1.  画出对应的类图;

 

2.提交该系统的代码,该系统务必是一个可以能够直接使用的系统,查阅资料完成相应加密算法的实现;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.util.Base64;

public class DESEncryption {

    // 生成DES密钥
   
public static SecretKey generateKey() throws Exception {
        KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
        keyGenerator.init(56, SecureRandom.getInstanceStrong());
        return keyGenerator.generateKey();
    }

    // DES加密
   
public static String encrypt(String data, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.ENCRYPT_MODE, key);
        byte[] encryptedData = cipher.doFinal(data.getBytes("UTF-8"));
        return Base64.getEncoder().encodeToString(encryptedData);
    }

    // DES解密
   
public static String decrypt(String encryptedData, SecretKey key) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, key);
        byte[] data = cipher.doFinal(Base64.getDecoder().decode(encryptedData));
        return new String(data);
    }

    public static void main(String[] args) {
        try {
            // 生成密钥
           
SecretKey key = generateKey();
            String originalText = "Hello, World!";

            // 加密
           
String encryptedText = encrypt(originalText, key);
            System.out.println("Encrypted Text: " + encryptedText);

            // 解密
           
String decryptedText = decrypt(encryptedText, key);
            System.out.println("Decrypted Text: " + decryptedText);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

3.注意编程规范。

标签:String,DES,10.14,Cipher,key,import,public
From: https://www.cnblogs.com/lijianlongCode13/p/18571562

相关文章

  • 【2024.10.14(?) 闲话】飞升
    今日推歌:神曲-RSoundDesign出题人怎么这么没素质。暴力哥获得了320分!而我t4暴力的bitset只开了30000,t2没冲出来,输麻了!我要飞升了!(注:起死回生,飞升上天)(注:某人的rating飞升记录)到底是谁在剪辑这样的视频。但是我要飞升!!!!11其实这是昨天的闲话。但是昨天忘记发了......
  • 【2024潇湘夜雨】WIN10_Ent-G_22H2.19045.5011软件选装纯净特别版10.14
    【系统简介】=============================================================1.本次更新母盘来自WIN10_Ent-G_22H2.19045.5011.进桌面后稍等片刻,等待后续部分优化完成。2.全程离线精简、无人值守调用优化处理制作。部分优化适配系统可能要重启几次,即使显示适配失败也不要在意,可能......
  • 10.14考试总结
    0+100+0,这也没啥好说的了,反正就差的一批吧……\(T1\)\(Hunter\)简单数论题,但\(lyh\)从来没有在考试的时候\(A\)过数论题。考虑第一个人挂的时间\(=\)其他人比第一个人早挂的概率。对于第\(i\)个人,简化问题,只留第一个人和第\(i\)个人,答案就是\(\dfrac{w_i}{w_1+w_......
  • 10.14随笔
    SQL (StructuredQueryLanguage:结构化查询语言)是用于管理关系数据库管理系统(RDBMS)。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。SQL是什么?SQL指结构化查询语言,全称是StructuredQueryLanguage。SQL让您可以访问和处理数据库......
  • #2 2023.10.14
    用.xlsx来记真是太傻逼了。换个.md来记。256.xsy5244数数(calc)打个表嬴麻了。257.xsy5255树树(tree)长剖推推推,差分一下过了。258.xsy5256数树(graph)按照值域分块,每个块记最前最后两个点。过了。259.pjudge21792【NOIPRound#6】抉择不会做。考虑乱搞!设\(f_......
  • 2023.10.14 总结
    T1题面:给\(n\)个数染色,要求使\(|i-j|\)为质数的两个数染的色不能一样,求任意一种染色方法。\(n\le6\)时直接打表,之后模拟一下。容易发现,\(2\)是质数中唯一一个偶数,所以我们可以\(1234\)连续染色,由于\(4\)是偶数且大于\(2\),所以差为质数的颜色不会相等。最后输出......
  • 10.14
    8.14切T1,并查集板子9.00发现T2假了9.08T360分暴力打完9.21切T2,贪心,难度还行10.40切T3,贪心,难度还行11.10打完T4的20分暴力应得分数320=100+100+100+20实得分数320=100+100+100+20最高分320=100+100+100+20运气好啊,两道贪心,并且思路非常正确,甚至表都没打直......
  • 2023.10.14 js事件监听
    //方式一<inputtype="button"onlick="on()"value="按钮1"><script>functionon(){alert("我被点击了~");}</script>//方式二<inputtype="button"id="btn"value="按钮......
  • 10.14日记
    饼图的主要元素包括:饼片(扇形):饼图由多个饼片组成,每个饼片的大小代表了对应部分在总体中的比例关系。标签:饼图中的每个饼片通常都会有一个标签,用于表示对应部分的具体名称或者数值。图例:图例是饼图的一部分,用于解释每个饼片所代表的含义,帮助观察者理解图表。百分比:饼图通常会显......
  • 10.14记录
    实现了java连接数据库的增删改查初步建立了Navicat,Tomcat等数据库连接必要的程序步骤。建立三个类型相同的数据库中的表格列......