实现条件
- maven
- jdk1.8
第一步
在maven配置中导入依赖
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
第二步
创建实体类
第一个类:
import com.alibaba.fastjson.JSON;
import java.io.*;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Scanner;
public class MD5 {
static Scanner sc=new Scanner(System.in);
static ArrayList<user> users =new ArrayList(); //此处的数组模拟一个数据库
public static void main(String[] args) {
//界面进入的开始前先将文本中的数据读入数据库(Array List<user> users)中
try {
Reader reader=new FileReader("User_INFO.txt");
String str="";
int n;
char [] a=new char[10];
while (-1!=(n=reader.read(a))){
str=str.concat(new String(a,0,n));
}
reader.close();
if(str!=""){
users= (ArrayList<user>) JSON.parseArray(str,user.class); //通过JSON将字符串解析为java对象
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("*******************************");
System.out.println("请选择:1、注册。2、登录。3、退出");
while (true){
int num=sc.nextInt();
if (num==3){
break;
}
switch (num){
case 1:register(); break;
case 2:login();break;
}
}
}
public static String getMD5String(String s){ //将字符串进行MD5加密
try {
MessageDigest md =MessageDigest.getInstance("MD5");
md.update(s.getBytes());
return new BigInteger(1,md.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
public static void register(){
System.out.println("请输入用户名");
String name="";
while(true){
// sc.nextLine();
boolean flag=true;
name=sc.next();
for (user user : users) {
if (user.name.equals(name)){
System.out.println("\033[31m" + "用户名被占用请重新起名"); //使用彩色字迹提醒
System.out.print("\033[30m");
System.out.println("请输入用户名");
flag=false;
}
}
if (flag){
break;
}
}
System.out.println("请输入密码:");
String passWord=sc.next();
//采用MD5加密存储用户密码,此时存入数据库的密码由于经过加密,即使破解数据库也不可能知道原来密码
user u=new user(name,getMD5String(passWord));
users.add(u);
String ujson= JSON.toJSONString(users);
try {
Writer writer=new FileWriter("User_INFO.txt");
System.out.println(ujson);
writer.write(ujson);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("创建成功");
System.out.println("*******************************");
System.out.println("请选择:1、注册。2、登录。3、退出");
}
public static void login(){
System.out.println("请输入用户名");
sc.nextLine();
String uname=sc.nextLine();
System.out.println("请输入密码");
String upwd=sc.nextLine();
boolean flag=false;
for (user user : users) {
if (user.name.equals(uname))
if (user.passWord.equals(getMD5String(upwd)))
//对用户输入的登录密码通过MD5加密 与数据库中的密码进行比较
flag=true;
}
if (flag){
System.out.println("登陆成功,请选择以下操作...");
System.out.println("未完待续....");
}
else {
System.out.println("登录失败,即将返回首页...");
System.out.println("*******************************");
System.out.println("请选择:1、注册。2、登录。3、退出");
}
}
}
第二个类:
public class user {
String name;
String passWord;
public user(String name, String passWord) {
this.name = name;
this.passWord = passWord;
}
public void setName(String name) {
this.name = name;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public String getName() {
return name;
}
public String getPassWord() {
return passWord;
}
@Override
public String toString() {
return "user{" +
"name='" + name + '\'' +
", passWord='" + passWord + '\'' +
'}';
}
}
程序结构:
- 在进入界面之前 通过json数据格式将XXX.txt中保存的用户信息加载到List集合中。
- 进入首界面。
- 1 2 3 对应不同的函数。
- 登录函数只需要比对List集合中的信息。
- 注册函数需要将List集合中的信息重新写入XXX.txt文件中,用来保存数据。