Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
142
Task/SQL-based-authentication/Java/sql-based-authentication.java
Normal file
142
Task/SQL-based-authentication/Java/sql-based-authentication.java
Normal file
|
|
@ -0,0 +1,142 @@
|
|||
import java.io.UnsupportedEncodingException;
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.SecureRandom;
|
||||
import java.math.BigInteger;
|
||||
|
||||
|
||||
class UserManager {
|
||||
private Connection dbConnection;
|
||||
|
||||
public UserManager() {
|
||||
}
|
||||
|
||||
private String md5(String aString) throws NoSuchAlgorithmException, UnsupportedEncodingException {
|
||||
MessageDigest md;
|
||||
String hex;
|
||||
StringBuffer hexString;
|
||||
byte[] bytesOfMessage;
|
||||
byte[] theDigest;
|
||||
|
||||
hexString = new StringBuffer();
|
||||
bytesOfMessage = aString.getBytes("UTF-8");
|
||||
md = MessageDigest.getInstance("MD5");
|
||||
theDigest = md.digest(bytesOfMessage);
|
||||
|
||||
for (int i = 0; i < theDigest.length; i++) {
|
||||
hex = Integer.toHexString(0xff & theDigest[i]);
|
||||
if (hex.length() == 1) {
|
||||
hexString.append('0');
|
||||
}
|
||||
hexString.append(hex);
|
||||
}
|
||||
|
||||
return hexString.toString();
|
||||
}
|
||||
|
||||
public void connectDB(String host, int port, String db, String user, String password)
|
||||
throws ClassNotFoundException, SQLException {
|
||||
|
||||
Class.forName("com.mysql.jdbc.Driver");
|
||||
|
||||
this.dbConnection = DriverManager.getConnection("jdbc:mysql://"
|
||||
+ host
|
||||
+ ":"
|
||||
+ port
|
||||
+ "/"
|
||||
+ db, user, password);
|
||||
}
|
||||
|
||||
public boolean createUser(String user, String password) {
|
||||
SecureRandom random;
|
||||
String insert;
|
||||
String salt;
|
||||
|
||||
random = new SecureRandom();
|
||||
salt = new BigInteger(130, random).toString(16);
|
||||
|
||||
insert = "INSERT INTO users "
|
||||
+ "(username, pass_salt, pass_md5) "
|
||||
+ "VALUES (?, ?, ?)";
|
||||
|
||||
try (PreparedStatement pstmt = this.dbConnection.prepareStatement(insert)) {
|
||||
pstmt.setString(1, user);
|
||||
pstmt.setString(2, salt);
|
||||
pstmt.setString(3, this.md5(salt + password));
|
||||
pstmt.executeUpdate();
|
||||
|
||||
return true;
|
||||
} catch(NoSuchAlgorithmException | SQLException | UnsupportedEncodingException ex) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean authenticateUser(String user, String password) {
|
||||
String pass_md5;
|
||||
String pass_salt;
|
||||
String select;
|
||||
ResultSet res;
|
||||
|
||||
select = "SELECT pass_salt, pass_md5 FROM users WHERE username = ?";
|
||||
res = null;
|
||||
|
||||
try(PreparedStatement pstmt = this.dbConnection.prepareStatement(select)) {
|
||||
pstmt.setString(1, user);
|
||||
res = pstmt.executeQuery();
|
||||
|
||||
res.next(); // We assume that username is unique
|
||||
|
||||
pass_salt = res.getString(1);
|
||||
pass_md5 = res.getString(2);
|
||||
|
||||
if (pass_md5.equals(this.md5(pass_salt + password))) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
|
||||
} catch(NoSuchAlgorithmException | SQLException | UnsupportedEncodingException ex) {
|
||||
return false;
|
||||
} finally {
|
||||
try {
|
||||
if (res instanceof ResultSet && !res.isClosed()) {
|
||||
res.close();
|
||||
}
|
||||
} catch(SQLException ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void closeConnection() {
|
||||
try {
|
||||
this.dbConnection.close();
|
||||
} catch(NullPointerException | SQLException ex) {
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
UserManager um;
|
||||
|
||||
um = new UserManager();
|
||||
try {
|
||||
um.connectDB("localhost", 3306, "test", "root", "admin");
|
||||
|
||||
if (um.createUser("johndoe", "test")) {
|
||||
System.out.println("User created");
|
||||
}
|
||||
|
||||
if (um.authenticateUser("johndoe", "test")) {
|
||||
System.out.println("User authenticated");
|
||||
}
|
||||
} catch(ClassNotFoundException | SQLException ex) {
|
||||
ex.printStackTrace();
|
||||
} finally {
|
||||
um.closeConnection();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue