Module Server : ajout d'un hashtool SHA-256; Création d'une classe AbstractSimpleHashTool pour centraliser le code des deux hashtool existant; utilisation de SHA256HashTool dans le module serveur gérant les identifiants de comptes utilisateurs

This commit is contained in:
Notmoo-PC\Notmoo 2017-10-26 16:51:37 +02:00
parent a62d7e0cc5
commit f628244e85
5 changed files with 53 additions and 26 deletions

View File

@ -5,7 +5,7 @@ import com.pqt.core.entities.user_account.AccountLevel;
import com.pqt.server.tools.io.ISerialFileManager; import com.pqt.server.tools.io.ISerialFileManager;
import com.pqt.server.tools.io.SimpleSerialFileManagerFactory; import com.pqt.server.tools.io.SimpleSerialFileManagerFactory;
import com.pqt.server.tools.security.IHashTool; import com.pqt.server.tools.security.IHashTool;
import com.pqt.server.tools.security.MD5HashTool; import com.pqt.server.tools.security.SHA256HashTool;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -19,7 +19,7 @@ import java.util.stream.Collectors;
* Cette classe n'est pas faite pour gérer les accès concurentiels au fichier assurant la persistance, et n'est donc pas * Cette classe n'est pas faite pour gérer les accès concurentiels au fichier assurant la persistance, et n'est donc pas
* thread-safe. Elle est conçue pour que tous les accès soient effectués depuis un même thread et depuis un unique objet. * thread-safe. Elle est conçue pour que tous les accès soient effectués depuis un même thread et depuis un unique objet.
* <p/> * <p/>
* Cette classe manipule les mot de passe sous forme chiffrée via un système de hash (md5) + salt, et ne fait pas * Cette classe manipule les mot de passe sous forme chiffrée via un système de hash (SHA-256) + salt, et ne fait pas
* persister les mots de passes non-chiffrées. Les noms d'utilisateurs sont stockés sans chiffrage. * persister les mots de passes non-chiffrées. Les noms d'utilisateurs sont stockés sans chiffrage.
*/ */
class FileAccountDao implements IAccountDao { class FileAccountDao implements IAccountDao {
@ -34,7 +34,7 @@ class FileAccountDao implements IAccountDao {
FileAccountDao() { FileAccountDao() {
accountEntries = new HashSet<>(); accountEntries = new HashSet<>();
connectedAccount = new HashSet<>(); connectedAccount = new HashSet<>();
hashTool = new MD5HashTool(); hashTool = new SHA256HashTool();
fileManager = SimpleSerialFileManagerFactory.getFileManager(AccountEntry.class, ACCOUNT_FILE_NAME); fileManager = SimpleSerialFileManagerFactory.getFileManager(AccountEntry.class, ACCOUNT_FILE_NAME);
loadFromFile(); loadFromFile();
} }

View File

@ -0,0 +1,39 @@
package com.pqt.server.tools.security;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public abstract class AbstractSimpleHashTool implements IHashTool {
private static final String DEFAULT_INSTANCE_CODE = "SHA-256";
private String instanceCode;
@Override
public final String hashAndSalt(String input, String salt) {
String encryptedInput = null;
if(input == null || salt == null) return null;
try {
String str = salt+input;
//Create MessageDigest object with the instance code
MessageDigest digest = (instanceCode!=null?MessageDigest.getInstance(instanceCode):MessageDigest.getInstance(DEFAULT_INSTANCE_CODE));
//Update input string in message digest
digest.update(str.getBytes(), 0, str.length());
//Converts message digest value in base 16 (hex)
encryptedInput = new BigInteger(1, digest.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return encryptedInput;
}
protected void setInstanceCode(String instanceCode){
this.instanceCode = instanceCode;
}
}

View File

@ -1,5 +1,5 @@
package com.pqt.server.tools.security; package com.pqt.server.tools.security;
public interface IHashTool { public interface IHashTool {
String hashAndSalt(String str, String salt); String hashAndSalt(String input, String salt);
} }

View File

@ -4,27 +4,8 @@ import java.math.BigInteger;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
public class MD5HashTool implements IHashTool{ public class MD5HashTool extends AbstractSimpleHashTool{
@Override public MD5HashTool() {
public String hashAndSalt(String input, String salt) { setInstanceCode("MD5");
String md5 = null;
if(input == null || salt == null) return null;
try {
String str = salt+input;
//Create MessageDigest object for MD5
MessageDigest digest = MessageDigest.getInstance("MD5");
//Update input string in message digest
digest.update(str.getBytes(), 0, str.length());
//Converts message digest value in base 16 (hex)
md5 = new BigInteger(1, digest.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return md5;
} }
} }

View File

@ -0,0 +1,7 @@
package com.pqt.server.tools.security;
public class SHA256HashTool extends AbstractSimpleHashTool {
public SHA256HashTool() {
setInstanceCode("SHA-256");
}
}