最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

分组密码加密

来源:动视网 责编:小OO 时间:2025-10-02 10:44:01
文档

分组密码加密

实习二分组密码加密一、实习目的1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。二、实习要求1.实习前认真预习第5章有关内容;2.熟悉java中的java.security.*和java.crypto.*中的相关类;3.按要求认真撰写实习报告。三、实习内容1.[基本要求]以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。2.[实现提示](1)可以利用java
推荐度:
导读实习二分组密码加密一、实习目的1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。二、实习要求1.实习前认真预习第5章有关内容;2.熟悉java中的java.security.*和java.crypto.*中的相关类;3.按要求认真撰写实习报告。三、实习内容1.[基本要求]以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。2.[实现提示](1)可以利用java
实习二  分组密码加密

一、实习目的

1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;

2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。

二、实习要求

1.实习前认真预习第5章有关内容;

2.熟悉java中的java.security.*和java.crypto.*中的相关类;

3.按要求认真撰写实习报告。

三、实习内容

1.[基本要求]

以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。

2.[实现提示]

(1) 可以利用java中的KeyGenerator类创建对称秘钥,利用工厂类KeyGenerator的静态方法getInstance()获得KeyGenerator()类对象;

(2) 方法getInstance()的参数为字符串类型,指定加密算法的名称如:Blowfish、DES、DESede、HmacMD5或HmacSHA1等;

(3) 利用工厂类Cipher的对象可以创建密码器。同样的,getInstance()的参数为字符串类型,指定加密算法的名称。

实验截图:

以DES加密为例,客户端:

客户端解密:

实习代码:

服务器MyServer类:

package Caesar_Modification;

import java.awt.EventQueue;

import java.awt.TextArea;

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.NoSuchPaddingException;

import javax.swing.JFrame;

import java.awt.Color;

import javax.swing.JButton;

import javax.swing.JLabel;

import sun.misc.BASEDecoder;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectInputStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.security.InvalidKeyException;

import java.security.Key;

import java.security.NoSuchAlgorithmException;

public class MyServer {

    private JFrame frame;

    private static ServerSocket server_text;

    private static Socket you_text;

    private static ServerSocket server_key;

    private static Socket you_key;

    private static TextArea SDealWith_Before;

    private static TextArea SDealWith_After;

    

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            public void run() {

                try {

                    MyServer window = new MyServer();

                    window.frame.setVisible(true);

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

        });    

    }

    

    public MyServer() throws IOException {

        initialize();

        

    }

    private void initialize() throws IOException {

        frame = new JFrame();

        frame.getContentPane().setBackground(Color.LIGHT_GRAY);

        frame.setTitle("服务器端");

        frame.setBounds(100, 100, 450, 300);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.getContentPane().setLayout(null);

        

        final TextArea SDealWith_After = new TextArea();

        SDealWith_After.setBounds(227, 103, 150, 115);

        frame.getContentPane().add(SDealWith_After);

        

        JLabel lblNewLabel = new JLabel("接收到的秘钥");

        lblNewLabel.setBounds(227, 10, 93, 15);

        frame.getContentPane().add(lblNewLabel);

        

        JLabel label_1 = new JLabel("处理后");

        label_1.setBounds(227, 78, 54, 15);

        frame.getContentPane().add(label_1);

        

        JButton button_1 = new JButton("清除");

        button_1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                SDealWith_After.setText("");

                SDealWith_Before.setText("");

            }

        });

        button_1.setBounds(269, 228, 93, 23);

        frame.getContentPane().add(button_1);

        

        final TextArea Pri_KeyS = new TextArea();

        Pri_KeyS.setBounds(227, 27, 150, 43);

        frame.getContentPane().add(Pri_KeyS);

        

        final TextArea SDealWith_Before = new TextArea();

        SDealWith_Before.setBounds(10, 103, 156, 115);

        frame.getContentPane().add(SDealWith_Before);

        

        JButton btnNewButton_1 = new JButton("开启秘钥通道");

        btnNewButton_1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                try {

                server_key = new ServerSocket(5679);

                you_key = server_key.accept();

                

                

                Pri_KeyS.setText("秘钥已传送。");

            } catch (IOException e1) {

                e1.printStackTrace();

            }

            }

        });

        btnNewButton_1.setBounds(10, 6, 150, 23);

        frame.getContentPane().add(btnNewButton_1);

        

        JButton btnNewButton = new JButton("解密");

        btnNewButton.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                try {

                    InputStream in = you_text.getInputStream();

                    InputStream is = you_key.getInputStream();

                    

                    ObjectInputStream b = new ObjectInputStream(is);

                    Key k1 = (Key)b.readObject();

                    b.close();

                    

                    

                    

                    int total_ctext = in.available();

                    byte[]ctext = new byte[total_ctext];

                    byte[]ptext = new byte[total_ctext];

                    

                    

                    Cipher cp = Cipher.getInstance("DES");

                    cp.init(Cipher.DECRYPT_MODE, k1);

                    

                    BufferedReader br = new BufferedReader(new InputStreamReader(in));

                    String cstring = br.readLine();

                    BASEDecoder basedecoder = new BASEDecoder(); 

                    ctext = basedecoder.decodeBuffer(cstring);

                    

                    ptext = cp.doFinal(ctext);

                    String p = new String(ptext,"UTF8");

                    SDealWith_Before.setText(cstring);

                    SDealWith_After.setText(p);

                    

                } catch (IOException e2) {

                    e2.printStackTrace();

                } catch (NoSuchAlgorithmException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                } catch (NoSuchPaddingException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                } catch (InvalidKeyException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                } catch (IllegalBlockSizeException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                } catch (BadPaddingException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                } catch (ClassNotFoundException e1) {

                    // TODO Auto-generated catch block

                    e1.printStackTrace();

                }

                try {

                    you_text.close();

                    server_text.close();

                    server_key.close();

                    you_key.close();

                } catch (IOException e1) {

                    e1.printStackTrace();

                }

            }

        });

        btnNewButton.setBounds(111, 228, 93, 23);

        frame.getContentPane().add(btnNewButton);

        

        JButton btnNewButton_2 = new JButton("开启密文通道");

        btnNewButton_2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                try {

                    server_text = new ServerSocket(5678);

                    you_text = server_text.accept();

                } catch (IOException e1) {

                    e1.printStackTrace();

                }

            }

        });

        btnNewButton_2.setBounds(10, 39, 150, 23);

        frame.getContentPane().add(btnNewButton_2);

        

        JLabel lbldes = new JLabel("通过DES加密后");

        lbldes.setBounds(20, 74, 93, 23);

        frame.getContentPane().add(lbldes);

        

    }

}

    

客户端MyClient类:

package Caesar_Modification;

import java.awt.EventQueue;

import java.awt.TextArea;

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import java.security.Key;

import javax.swing.JFrame;

import javax.swing.JTextField;

import javax.swing.JLabel;

import javax.swing.JButton;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.Color;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import javax.swing.JTextArea;

import sun.misc.BASEEncoder;

public class MyClient {

 

  

   

    

    

   

    

   

  

 

 

 

 

  客户端");

 

 

 

 

  明文");

 

 

 

 

 

 

  加密");

 

  

   

   

   

   

   

   

   

   

   

   

   

   

   

   

    初始化Cipher对象

   

    指定UTF8字符集,可以跨平台

   

   

    

    

    

    

    

   

    

    

   

    

    

    加密序列化

   

   

   

   

   

    

   

    

   

    

    

   

    

    

   

    

    

   

    

    

   

  

 

 

 

 

 

 

 

 

 

  清除");

 

  

   

   

  

 

 

 

 

  服务器地址");

 

 

 

  发送秘钥");

 

  

   

   

    

    

     默认秘钥长度为168bit

    

  

  

  

  

    

   

    

   

    

   

    

    

   

  

 

 

 

 

}

实验总结:

    本次实验结合了第一次实验的成果,将秘钥和密文分别使用第一次实验的结果通信,运用JAVA自带的加密方法进行加密。其中,本次实验调试的时间特别长,总是在加解密的时候出现问题,最后发现服务器和客户端所引的自带的加密的包不同造成的,也通过这个了解了更多的知识。

文档

分组密码加密

实习二分组密码加密一、实习目的1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。二、实习要求1.实习前认真预习第5章有关内容;2.熟悉java中的java.security.*和java.crypto.*中的相关类;3.按要求认真撰写实习报告。三、实习内容1.[基本要求]以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。2.[实现提示](1)可以利用java
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top