1、分组密码加密实习二 分组密码加密一、实习目的1理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish;2以DES加密算法为例,掌握分组加密算法加、解密过程的实现。二、实习要求1实习前认真预习第5章有关内容;2熟悉java中的java.security.*和java.crypto.*中的相关类;3按要求认真撰写实习报告。三、实习内容1基本要求以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。2实现提示(1) 可以利用java中的KeyGenerator类创建对称秘钥,利用工厂类KeyGenerator的静态方法getInstanc
2、e()获得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.c
3、rypto.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.BASE64Decoder;import java.awt.event.Actio
4、nListener;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 .ServerSocket;import .Socket;import java.security.InvalidKeyException;import java.security.Key;impo
5、rt 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 SDea
6、lWith_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() thro
7、ws 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(); SDeal
8、With_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(
9、).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
10、 = 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.a
11、ddActionListener(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(btnN
12、ewButton_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 = (Ke
13、y)b.readObject(); b.close(); int total_ctext = in.available(); bytectext = new bytetotal_ctext; byteptext = new bytetotal_ctext; Cipher cp = Cipher.getInstance(DES); cp.init(Cipher.DECRYPT_MODE, k1); BufferedReader br = new BufferedReader(new InputStreamReader(in); String cstring = br.readLine(); BA
14、SE64Decoder base64decoder = new BASE64Decoder(); ctext = base64decoder.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)
15、/ 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 bl
16、ock 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 (IOExceptio
17、n 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);
18、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 Cae
19、sar_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.swin
20、g.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.OutputS
21、tream;import java.io.PrintWriter;import .Socket;import .UnknownHostException;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import javax.swing.JTextArea;import sun.misc.BASE64Encoder;public class MyClient private JFrame frame; private JTextField Login_C; priva
22、te static TextArea CDealWith_Before; private static TextArea Pri_KeyC; private static Key secretkey; public static void main(String args) EventQueue.invokeLater(new Runnable() public void run() try MyClient window = new MyClient(); window.frame.setVisible(true); catch (Exception e) e.printStackTrace
23、(); ); public MyClient() initialize(); private void initialize() 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); JLabe
24、l lblNewLabel = new JLabel(明文); lblNewLabel.setBounds(169, 18, 112, 33); frame.getContentPane().add(lblNewLabel); final TextArea CDealWith_Before = new TextArea(); CDealWith_Before.setBounds(169, 61, 242, 143); frame.getContentPane().add(CDealWith_Before); JButton btnNewButton_1 = new JButton(加密); b
25、tnNewButton_1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Socket mySocket_text; String str_before = ; try mySocket_text = new Socket(Login_C.getText(),5678); OutputStream os= null; os = mySocket_text.getOutputStream(); PrintWriter pw = new PrintWriter(os); str_b
26、efore = CDealWith_Before.getText(); Cipher cp = Cipher.getInstance(DES); /初始化Cipher对象 cp.init(Cipher.ENCRYPT_MODE, secretkey); byte ptext = str_before.getBytes(UTF8);/指定UTF8字符集,可以跨平台 byte ctext; try ctext = cp.doFinal(ptext); BASE64Encoder base64encoder = new BASE64Encoder(); pw.write(base64encoder.
27、encode(ctext); pw.close(); catch (IllegalBlockSizeException e1) / TODO Auto-generated catch block e1.printStackTrace(); catch (BadPaddingException e1) / TODO Auto-generated catch block e1.printStackTrace(); /加密序列化 mySocket_text.close(); catch (UnknownHostException e1) e1.printStackTrace(); catch (IO
28、Exception e1) e1.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 (Exception e2)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1