4.17-4.18学习总结

MD5

MD5:
1、压缩性

2、容易计算
3、抗修改性

4、弱抗碰撞
5、强抗碰撞

为什么需要MD5?

存储一些敏感信息的时候,如果不进行加密会出现安全问题

例如:系统登录的密码,如果数据库中的密码采用明文,一旦数据库泄露,则用户的密码直接泄露。但是使用MD5加密算法之后即使数据泄露,也不会被轻易的破解,相对安全。

public class MD5Utils {
 
	public static String getPWD( String strs ){
		/*
		 * 加密需要使用JDK中提供的类
		 */
		StringBuffer sb = new StringBuffer();
		try{
			MessageDigest digest = MessageDigest.getInstance("MD5");
 
			byte[] bs = digest.digest(strs.getBytes());
 
			for (byte b : bs) {
				int x = b & 255;
				String s = Integer.toHexString(x);
				if( x > 0 && x < 16 ){
					sb.append("0");
					sb.append(s);
				}else{
					sb.append(s);
				}
			}
 
		}catch( Exception e){
			System.out.println("加密失败");
		}
		return sb.toString();
	}
 
}

原理说明: 

MD5码以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值

总体流程如下图所示,每次的运算都由前一轮的128位结果值和当前的512bit值进行运算

 序列化

 序列化其实就是:将一个对象转化为一种格式,能够更好的传输和电脑理解。

反序列化是转换过来,便于人们观看的。

public class Person implements serializable 
{
        private string name;
        private int age;
        public Person ( String name,int age) {
        this.name = name ;
        this.age = age;
);



public class write{
    public static void main(String[] args) {
        try (
        //创建一个objectoutputStream输出流
        objectoutputStream oos = new   ObjectoutputStream(newFileOutputStream("object.txt")));
/将对象序列化到文件s
        Person person = new Person ( "1",23);
        oos.write( person ) ;
}catch (Exception e){
            e.printStackTrace();
}

正则表达式:

正则表达式是一种字符串匹配一的模式

作业:
数据验证:比如电话号码、邮箱等
替换文本:快速找到特定文本,用于替换
快速提取字符串:基于匹配原则,快速从文档中查找或提取子字符串

比如简单实现一个身份证的正则表达式:

 

 socket简单实现多个线程对一个服务器:

package login;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("127.0.0.1", 20000);
        new Thread(new ClientTread(socket)).start();
        PrintStream ps = new PrintStream(socket.getOutputStream());

        String line = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        while ((line = br.readLine()) != null) {
            ps.println(line);
        }
        if (br != null) br.close();
        if (socket != null) socket.close();
    }
}
package login;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;

public class ClientTread implements Runnable {
    private final Socket socket;
    BufferedReader br = null;

    public ClientTread(Socket socket) throws IOException {
        this.socket = socket;
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }

    public void run() {
        String content = null;
        while (true) {
            try {
                if ((content = br.readLine()) == null) break;
            } catch (IOException e) {
                e.printStackTrace();
                e.getCause();
            }
            System.out.println(content);
        }
    }

}
package socket;


import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class Server {
    public static List<Socket> socketList = Collections.synchronizedList(new ArrayList<>());

    public static void main(String[] args) throws IOException {
        List<Socket> socketList = new ArrayList<>();

        ServerSocket serverSocket = new ServerSocket(20000);
        try {
            while (true) {

                Socket socket1 = serverSocket.accept();
                socketList.add(socket1);
                new Thread(new ServerThread(socket1)).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
            socketList.removeAll(socketList);
        }
package socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class ServerThread implements Runnable {
    Socket socket = null;
    BufferedReader br = null;

    public ServerThread(Socket socket) throws Exception {
        this.socket = socket;
        br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    }

    public void run() {
        String content = null;
        while ((content = readFormClient()) != null) {
            for (Socket socket : Server.socketList) {
                try {
                    PrintStream ps = new PrintStream(socket.getOutputStream());
                } catch (IOException e) {
                    e.printStackTrace();
                    e.getCause();
                }
            }
        }
    }

    private String readFormClient() {
        try {
            return br.readLine();
        } catch (IOException e) {
            Server.socketList.remove(socket);
        }
        return null;
    }
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值