当前位置: 首页 > article >正文

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;
    }
}

 

 

 


http://www.kler.cn/a/13838.html

相关文章:

  • AI Stable Diffusion Prompt参数【一】
  • vector(入门知识点)
  • 计及源荷不确定性的综合能源生产单元运行调度与容量配置优化研究(Matlab代码实现)
  • es6 const的使用
  • javascript for循环的定义
  • 美团人气榜
  • Adobe国际认证证书有用吗?
  • HoloLens2场景理解,识别平面信息
  • 媒体宣传的优势与重要性
  • Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 02
  • 【C++学习笔记】字符串、向量和数组
  • flac格式如何转mp3,3招帮你搞定
  • springboot+vue准妈妈孕期交流平台(源码+文档)
  • shell脚本中用法_遇到的坑
  • Windows 服务监控工具
  • 第一个机器学习应用:鸢尾花分类
  • 哪款无线洗地机最好用?好用的无线洗地机分享
  • 无线洗地机哪款性价比高?高性价比的洗地机分享
  • OSCP-Exfiltrated(Subrion、exiftool提权)
  • 功能安全ISO26262 道路车辆 功能安全审核及评估方法第3部分:软件层面