mirror of
https://github.com/klmp200/PQT_Gestionnaire_vente_stock.git
synced 2024-12-22 15:31:08 +00:00
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:
parent
a62d7e0cc5
commit
f628244e85
@ -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.SimpleSerialFileManagerFactory;
|
||||
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.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
|
||||
* 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/>
|
||||
* 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.
|
||||
*/
|
||||
class FileAccountDao implements IAccountDao {
|
||||
@ -34,7 +34,7 @@ class FileAccountDao implements IAccountDao {
|
||||
FileAccountDao() {
|
||||
accountEntries = new HashSet<>();
|
||||
connectedAccount = new HashSet<>();
|
||||
hashTool = new MD5HashTool();
|
||||
hashTool = new SHA256HashTool();
|
||||
fileManager = SimpleSerialFileManagerFactory.getFileManager(AccountEntry.class, ACCOUNT_FILE_NAME);
|
||||
loadFromFile();
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
package com.pqt.server.tools.security;
|
||||
|
||||
public interface IHashTool {
|
||||
String hashAndSalt(String str, String salt);
|
||||
String hashAndSalt(String input, String salt);
|
||||
}
|
||||
|
@ -4,27 +4,8 @@ import java.math.BigInteger;
|
||||
import java.security.MessageDigest;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
|
||||
public class MD5HashTool implements IHashTool{
|
||||
@Override
|
||||
public String hashAndSalt(String input, String salt) {
|
||||
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;
|
||||
public class MD5HashTool extends AbstractSimpleHashTool{
|
||||
public MD5HashTool() {
|
||||
setInstanceCode("MD5");
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.pqt.server.tools.security;
|
||||
|
||||
public class SHA256HashTool extends AbstractSimpleHashTool {
|
||||
public SHA256HashTool() {
|
||||
setInstanceCode("SHA-256");
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user