概念:
MD5加密是为了防止在数据库操作时,DBA(数据库管理员)直接获取用户的密码导致信息的泄露而采用的一种加密的方法。
项目结构:
Main:
package com
.jd
.test
;
import java
.util
.Scanner
;
import java
.util
.UUID
;
import com
.jd
.tool
.MD5Tool
;
import com
.jd
.tool
.db
.DBLink
;
public class Main {
private static DBLink db
= new DBLink();
public static void main(String
[] args
) {
System
.out
.println("*********************************");
System
.out
.println("*\t\t\t\t*");
System
.out
.println("*\t欢迎使用注册登录系统\t\t*");
System
.out
.println("*\t\t\t\t*");
System
.out
.println("*********************************");
while (true) {
menu();
}
}
static void menu() {
System
.out
.println("1、注册");
System
.out
.println("2、登录");
System
.out
.println("3、退出");
System
.out
.println("请输入操作,以Enter键结束:");
Scanner scanner
= new Scanner(System
.in
);
int option
= scanner
.nextInt();
switch (option
) {
case 1:{
System
.out
.println("请输入用户名:");
String userName
= scanner
.next();
String sql
= "select user_name from user_info where user_name =?";
if (db
.exist(sql
, userName
)) {
System
.out
.println("用户名已存在,请重新输入!");
return;
}
System
.out
.println("请设置密码:");
String password
= scanner
.next();
System
.out
.println("请确认密码:");
String newpassword
= scanner
.next();
if(!newpassword
.equals(password
)) {
return;
}
String id
= UUID
.randomUUID().toString();
password
= MD5Tool
.encrypt(password
);
sql
= "insert into user_info(id,user_name,password)values(?,?,?)";
if(db
.update(sql
, id
,userName
,password
)) {
System
.out
.println("注册成功");
}
break;
}
case 2:{
System
.out
.println("请输入用户名:");
String userName
= scanner
.next();
System
.out
.println("请输入密码:");
String password
= scanner
.next();
password
= MD5Tool
.encrypt(password
);
String sql
= "select user_name from user_info where user_name=? and password=?";
if(db
.exist(sql
,userName
,password
)) {
System
.out
.println("登陆成功");
return;
}
System
.out
.println("用户名或密码错误!请重新登录");
break;
}
case 3:{
System
.out
.println("退出成功");
System
.exit(0);
}
default:
System
.out
.println("I'm Sorry,there is not the "+option
+" option,please try again.");
}
}
}
DBLink:
package com
.jd
.tool
.db
;
import java
.sql
.Connection
;
import java
.sql
.DriverManager
;
import java
.sql
.PreparedStatement
;
import java
.sql
.ResultSet
;
import java
.sql
.SQLException
;
import java
.sql
.Statement
;
import org
.apache
.log4j
.Logger
;
import com
.jd
.tool
.PropertiesTool
;
public class DBLink {
private Logger logger
= Logger
.getLogger(DBLink
.class);
private Connection
getConnection() {
try {
Class
.forName("com.mysql.jdbc.Driver");
String userName
= PropertiesTool
.getValue("db.username");
String password
= PropertiesTool
.getValue("db.password");
String url
= PropertiesTool
.getValue("db.url");
return DriverManager
.getConnection(url
, userName
, password
);
} catch (Exception e
) {
logger
.debug(e
.getMessage(), e
);
}
return null
;
}
public void select(String sql
, IRowMapper rowMapper
) {
Connection connection
= null
;
Statement statement
= null
;
ResultSet resultSet
= null
;
try {
connection
= getConnection();
statement
= connection
.createStatement();
resultSet
= statement
.executeQuery(sql
);
rowMapper
.rowMapper(resultSet
);
} catch (Exception e
) {
e
.printStackTrace();
} finally {
close(resultSet
, statement
, connection
);
}
}
public void select(String sql
, IRowMapper rowMapper
, Object
... params
) {
Connection connection
= null
;
PreparedStatement preparedStatement
= null
;
ResultSet resultSet
= null
;
try {
connection
= getConnection();
preparedStatement
= connection
.prepareStatement(sql
);
for (int i
= 0; i
< params
.length
; i
++) {
preparedStatement
.setObject(i
+ 1, params
[i
]);
}
resultSet
= preparedStatement
.executeQuery();
rowMapper
.rowMapper(resultSet
);
} catch (Exception e
) {
e
.printStackTrace();
} finally {
close(resultSet
, preparedStatement
, connection
);
}
}
public boolean exist(String sql
) {
Connection connection
= null
;
Statement statement
= null
;
ResultSet resultSet
= null
;
try {
connection
= getConnection();
statement
= connection
.createStatement();
resultSet
= statement
.executeQuery("select id,name,mobile,address from first_class");
return resultSet
.next();
} catch (Exception e
) {
e
.printStackTrace();
} finally {
close(resultSet
, statement
, connection
);
}
return false;
}
public boolean exist(String sql
, Object
... params
) {
Connection connection
= null
;
PreparedStatement preparedStatement
= null
;
ResultSet resultSet
= null
;
try {
connection
= getConnection();
preparedStatement
= connection
.prepareStatement(sql
);
for (int i
= 0; i
< params
.length
; i
++) {
preparedStatement
.setObject(i
+ 1, params
[i
]);
}
resultSet
= preparedStatement
.executeQuery();
return resultSet
.next();
} catch (Exception e
) {
e
.printStackTrace();
} finally {
close(resultSet
, preparedStatement
, connection
);
}
return false;
}
public boolean update(String sql
) {
Connection connection
= null
;
Statement statement
= null
;
try {
connection
= getConnection();
statement
= connection
.createStatement();
int result
= statement
.executeUpdate(sql
);
return result
> 0;
} catch (Exception e
) {
e
.printStackTrace();
} finally {
close(statement
, connection
);
}
return false;
}
public boolean update(String sql
, Object
... params
) {
Connection connection
= null
;
PreparedStatement preparedStatement
= null
;
try {
connection
= getConnection();
preparedStatement
= connection
.prepareStatement(sql
);
for (int i
= 0; i
< params
.length
; i
++) {
preparedStatement
.setObject(i
+ 1, params
[i
]);
}
return preparedStatement
.executeUpdate() > 0;
} catch (Exception e
) {
e
.printStackTrace();
} finally {
close(preparedStatement
, connection
);
}
return false;
}
private void close(Statement statement
, Connection connection
) {
try {
if (statement
!= null
) {
statement
.close();
}
} catch (SQLException e1
) {
e1
.printStackTrace();
}
try {
if (connection
!= null
) {
connection
.close();
}
} catch (SQLException e
) {
e
.printStackTrace();
}
}
private void close(ResultSet resultSet
, Statement statement
, Connection connection
) {
try {
if (resultSet
!= null
) {
resultSet
.close();
}
} catch (SQLException e
) {
e
.printStackTrace();
}
close(statement
, connection
);
}
}
IRowMapper:
package com
.jd
.tool
.db
;
import java
.sql
.ResultSet
;
public interface IRowMapper {
void rowMapper(ResultSet rs
);
}
MD5Tool:
package com
.jd
.tool
;
import java
.math
.BigInteger
;
import java
.security
.MessageDigest
;
public class MD5Tool {
public static String
encrypt(String password
) {
byte[] bytes
= null
;
try {
MessageDigest messageDigest
= MessageDigest
.getInstance("MD5");
messageDigest
.update(password
.getBytes());
bytes
= messageDigest
.digest();
} catch (Exception e
) {
e
.printStackTrace();
}
String result
= new BigInteger(1, bytes
).toString(16);
for (int i
= 0; i
< 32 - result
.length(); i
++) {
result
= "0" + result
;
}
return result
;
}
}
PropertiesTool:
package com
.jd
.tool
;
import java
.io
.IOException
;
import java
.io
.InputStream
;
import java
.util
.Properties
;
public class PropertiesTool {
private static Properties properties
= new Properties();
static {
InputStream inputStream
= PropertiesTool
.class.getClassLoader().getResourceAsStream("db.properties");
try {
properties
.load(inputStream
);
} catch (IOException e
) {
e
.printStackTrace();
}
}
public static void main(String
[] ages
) {
String userName
= properties
.getProperty("db.username");
System
.out
.print(userName
);
}
public static String
getValue(String key
) {
return properties
.getProperty(key
);
}
}
db.properties:
db
.username
=root
db
.password
=root
db
.url
=jdbc
:mysql
://127.0.0.1:3306/test
log4j.properties:
# DEBUG\u8BBE\u7F6E\u8F93\u51FA\u65E5\u5FD7\u7EA7\u522B\uFF0C\u7531\u4E8E\u4E3ADEBUG\uFF0C\u6240\u4EE5ERROR\u3001WARN\u548CINFO \u7EA7\u522B\u65E5\u5FD7\u4FE1\u606F\u4E5F\u4F1A\u663E\u793A\u51FA\u6765
log4j
.rootLogger
=DEBUG
,RollingFile
#\u5C06\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u63A7\u5236\u53F0
log4j
.appender
.Console
=org
.apache
.log4j
.ConsoleAppender
log4j
.appender
.Console
.layout
=org
.apache
.log4j
.PatternLayout
log4j
.appender
.Console
.layout
.ConversionPattern
= [%-5p
]-[%d
{yyyy
-MM
-dd HH
:mm
:ss
}] -%l
-%m
%n
#\u5C06\u65E5\u5FD7\u4FE1\u606F\u8F93\u51FA\u5230\u64CD\u4F5C\u7CFB\u7EDFD\u76D8\u6839\u76EE\u5F55\u4E0B\u7684log
.log\u6587\u4EF6\u4E2D
log4j
.appender
.RollingFile
=org
.apache
.log4j
.DailyRollingFileAppender
log4j
.appender
.RollingFile
.File
=D
://log
.log
log4j
.appender
.RollingFile
.layout
=org
.apache
.log4j
.PatternLayout
log4j
.appender
.RollingFile
.layout
.ConversionPattern
=%d
[%t
] %-5p
%-40.40c
%X
{traceId
}-%m
%n