From 9ce5298cc83e8ee42ca8e3e74a77acd3d3286222 Mon Sep 17 00:00:00 2001 From: ys037 <ys037@hdm-stuttgart.de> Date: Wed, 20 Dec 2023 11:43:00 +0100 Subject: [PATCH] Feature: Added decrypting of logindata for our current ORacleDB database and our old AzureDB database Add: CryptoUtils.java (for decrypting loginfiles) Add: CryptoException.java (to catch multiple Exceptions from CryptoUtils.java Class) Update: OracleDB.java, DBalt.java(added lines for decrypting and a method to get the decrypted logindata stored into variables) Add: AzureDB_logindetails, document.encrypted and OracleDB_logindetails as a alternative to document.encrypted (These files contain the decrypted logindata for our database) #60 --- .../Persistance/Classes/CryptoException.java | 7 +++ .../Persistance/Classes/CryptoUtils.java | 59 ++++++++++++++++++ .../Persistance/Classes/DBalt.java | 23 ++++++- .../Persistance/Classes/ISQLDataBase.java | 2 +- .../Persistance/Classes/OracleDB.java | 26 ++++++-- .../resources/database/AzureDB_logindetails | Bin 0 -> 111 bytes .../resources/database/OracleDB_logindetails | Bin 0 -> 48 bytes .../resources/database/document.encrypted | Bin 0 -> 84 bytes 8 files changed, 111 insertions(+), 6 deletions(-) create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java create mode 100644 src/main/resources/database/AzureDB_logindetails create mode 100644 src/main/resources/database/OracleDB_logindetails create mode 100644 src/main/resources/database/document.encrypted diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java new file mode 100644 index 00000000..9c7c7b6a --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java @@ -0,0 +1,7 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; + +public class CryptoException extends Exception{ + public CryptoException(String message, Throwable throwable) { + super(message, throwable); + } +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java new file mode 100644 index 00000000..a3ffe29d --- /dev/null +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java @@ -0,0 +1,59 @@ +package de.hdm_stuttgart.battlearena.Persistance.Classes; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.spec.SecretKeySpec; + +import java.nio.charset.StandardCharsets; + + +public class CryptoUtils{ + private static String parts[] = new String[2]; + private static final String ALGORITHM = "AES"; + private static final String TRANSFORMATION = "AES"; + + /*public static void encrypt(String key, File inputFile, File outputFile) + throws CryptoException { + doCrypto(Cipher.ENCRYPT_MODE, key, inputFile); + }*/ + + public static String[] decrypt(String key, File inputFile) + throws CryptoException { + doCrypto(Cipher.DECRYPT_MODE, key, inputFile); + return parts; + } + + public static String[] doCrypto(int cipherMode, String key, File inputFile) throws CryptoException { + try { + Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(cipherMode, secretKey); + + FileInputStream inputStream = new FileInputStream(inputFile); + byte[] inputBytes = new byte[(int) inputFile.length()]; + inputStream.read(inputBytes); + + byte[] outputBytes = cipher.doFinal(inputBytes); + + String completeString = new String(outputBytes, StandardCharsets.UTF_8); + System.out.println(completeString); + parts = completeString.split(";"); + + inputStream.close(); + + } catch (NoSuchPaddingException | NoSuchAlgorithmException + | InvalidKeyException | BadPaddingException + | IllegalBlockSizeException | IOException ex) { + throw new CryptoException("Error encrypting/decrypting file", ex); + } + return parts; + } +} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java index ddb1c2ba..bff8f428 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java @@ -4,6 +4,7 @@ import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import java.io.File; import java.io.IOException; import java.util.LinkedHashMap; import java.util.Properties; @@ -11,6 +12,26 @@ import java.sql.*; public class DBalt implements IDataBasealt { + static String key = "Peters Olivenöl"; + + private static String user=""; + private static String password=""; + private static String[] parts= new String[2]; + + //static File inputFile = new File("src\\main\\resources\\database\\OracleDB_logindetails"); + static File encryptedFile = new File("src\\main\\resources\\database\\AzureDB_logindetails"); + //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted"); + + protected static void getlogindata() throws CryptoException { + parts = CryptoUtils.decrypt(key, encryptedFile); + String completeString = parts[0] + parts[1]; + parts = completeString.split("="); + user = parts[1]; + password = parts[2]; + user = user.replace("password", ""); + log.info("AzureDB_logindetails: user: " + user +" password: " + password); + } + private static final Logger log = LogManager.getLogger(DBalt.class); @@ -22,7 +43,7 @@ public class DBalt implements IDataBasealt { properties.load(getClass().getClassLoader().getResourceAsStream("config.properties")); log.info("Connecting to the database!"); - Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("user"), properties.getProperty("password")); + Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty(user), properties.getProperty(password)); log.info("Database connection test" + connection.getCatalog()); connection.setAutoCommit(true); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java index 51f83a17..609d2476 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java @@ -7,7 +7,7 @@ import java.util.ArrayList; public interface ISQLDataBase { - Connection connect() throws DatabaseError; + Connection connect() throws DatabaseError, CryptoException; ArrayList<MapData> getCoreMaps() throws DatabaseError; diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java index 5eac5ff7..82006d89 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java @@ -4,21 +4,39 @@ import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import java.io.File; import java.sql.*; import java.util.ArrayList; import oracle.jdbc.pool.OracleDataSource; + public class OracleDB implements ISQLDataBase { + static String key = "Peters Olivenöl"; + private static String user=""; + private static String password=""; + private static String[] parts= new String[2]; + + static File encryptedFile = new File("src\\main\\resources\\database\\document.encrypted"); + + //static File encryptedFile = new File("src\\main\\resources\\database\\document.encrypted"); + //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted"); private static final Logger log = LogManager.getLogger(OracleDB.class); + public void getlogindata() throws CryptoException { + parts = CryptoUtils.decrypt(key, encryptedFile); + user = parts[0]; + password = parts[1]; + log.info("OracleDB_logindetails: user: " + user + " password: " + password); + } @Override - public Connection connect() throws DatabaseError{ + public Connection connect() throws DatabaseError, CryptoException { + getlogindata(); try { OracleDataSource ods = new OracleDataSource(); ods.setURL("jdbc:oracle:thin:@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=g093caf2cf1fea4_battlearena_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))"); - ods.setUser("battlearenaplayer"); - ods.setPassword("jo3+++w3rw+s##AA"); + ods.setUser(user); + ods.setPassword(password); Connection conn = ods.getConnection(); log.info("Connecting to the database!"); @@ -100,7 +118,7 @@ public class OracleDB implements ISQLDataBase { } } - public void uploadCommunityMap(MapData map) throws DatabaseError{ + public void uploadCommunityMapByID(MapData map) throws DatabaseError{ try(Connection connection = connect()) { String sql = "INSERT INTO battlearenadata.communitymaps (map_id, map_name, map_width, map_height, map_data) VALUES (?, ?, ?, ?, ?)"; PreparedStatement stmt = connection.prepareStatement(sql); diff --git a/src/main/resources/database/AzureDB_logindetails b/src/main/resources/database/AzureDB_logindetails new file mode 100644 index 0000000000000000000000000000000000000000..1911780ef54a37f40c4b37e5f4a478f8c7874d28 GIT binary patch literal 111 zcmXTTf4_e(5Q$${0wi54Z51K>cXQWh0a<lGEDXX7k`QqqdA1`?S_w#(z(wk0fJ_}A ZzPtuV@B#6S-QjMWKpKt=fGj6Ab^zP3NFe|K literal 0 HcmV?d00001 diff --git a/src/main/resources/database/OracleDB_logindetails b/src/main/resources/database/OracleDB_logindetails new file mode 100644 index 0000000000000000000000000000000000000000..837a9fbcf781d32fe5ecb8608ad6a314235ba395 GIT binary patch literal 48 zcmV-00MGv^1%~e?>!3~N0C{PaZl~7$p*RB0m>v*$v<63J980qjdfd<KybHwVF_VV{ Gd7K3&gBDQ$ literal 0 HcmV?d00001 diff --git a/src/main/resources/database/document.encrypted b/src/main/resources/database/document.encrypted new file mode 100644 index 0000000000000000000000000000000000000000..4628fda970ac9930417a073c4bac11ac2cafdc69 GIT binary patch literal 84 zcmdO7eZPM%5UByNFAy_SW&+7PAci9grgJmo1S)}iHup3cZy+sH1()Q8unZv-D@YY9 E0Is4mj{pDw literal 0 HcmV?d00001 -- GitLab