Ajout du hashing
This commit is contained in:
parent
b1ff4140c2
commit
46cbcaf705
@ -8,6 +8,7 @@ import lightcontainer.protocol.rules.writer.SaveFileOkRule;
|
|||||||
import lightcontainer.protocol.rules.writer.SendfileRule;
|
import lightcontainer.protocol.rules.writer.SendfileRule;
|
||||||
import lightcontainer.utils.AES_GCM;
|
import lightcontainer.utils.AES_GCM;
|
||||||
import lightcontainer.utils.FileReceiver;
|
import lightcontainer.utils.FileReceiver;
|
||||||
|
import lightcontainer.utils.SHA;
|
||||||
import lightcontainer.utils.ShaHasher;
|
import lightcontainer.utils.ShaHasher;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -65,20 +66,22 @@ public class SavefileRule extends ProtocolReader {
|
|||||||
this.filename = hasher.nextHashing();
|
this.filename = hasher.nextHashing();
|
||||||
String fileNameSalt = hasher.getSalt();
|
String fileNameSalt = hasher.getSalt();
|
||||||
|
|
||||||
String key = AES_GCM.generateSecretKey();
|
String key = getContext().getAesKey();
|
||||||
String iv = AES_GCM.generateIV();
|
String iv = AES_GCM.generateIV();
|
||||||
|
|
||||||
if (!fileReceiver.receiveFile(reader, this.filename, this.size, key, iv))
|
if (!fileReceiver.receiveFile(reader, this.filename, this.size, key, iv))
|
||||||
throw new IOException();
|
throw new IOException();
|
||||||
|
|
||||||
|
String fileHash = SHA.hashFile(storagePath, this.filename);
|
||||||
|
|
||||||
// On met les données de la requête actuelle
|
// On met les données de la requête actuelle
|
||||||
getContext().putDataString("fileName", filename);
|
getContext().putDataString("fileName", filename);
|
||||||
getContext().putDataInt("size", size);
|
getContext().putDataInt("size", size);
|
||||||
getContext().putDataString("iv", iv);
|
getContext().putDataString("iv", iv);
|
||||||
getContext().putDataString("fileNameSalt", fileNameSalt);
|
getContext().putDataString("fileNameSalt", fileNameSalt);
|
||||||
|
|
||||||
this.setResultCommand(protocolRep.executeWriter(getContext(), SendfileRule.NAME, this.filename, String.valueOf(this.size), "EMPREINTEBLBLBLBLBLABLABLBALBALBALBALBALBALBALBALBALABLBALBALBALABLABLABLABLABLABLABALBLABALABLABLABLABKJABKAHBHKBHJbhjvgkh"), ResultCmdReceiver.STOREBACKEND);
|
this.setResultCommand(protocolRep.executeWriter(getContext(), SendfileRule.NAME, this.filename, String.valueOf(this.size), fileHash), ResultCmdReceiver.STOREBACKEND);
|
||||||
} catch (IOException | AES_GCM.AesGcmException e) {
|
} catch (IOException | SHA.ShaException e) {
|
||||||
this.setResultCommand(protocolRep.executeWriter(getContext(), SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
this.setResultCommand(protocolRep.executeWriter(getContext(), SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -92,7 +95,6 @@ public class SavefileRule extends ProtocolReader {
|
|||||||
@Override
|
@Override
|
||||||
protected SavefileRule.Result onExecuted(Context context, String... data) {
|
protected SavefileRule.Result onExecuted(Context context, String... data) {
|
||||||
SavefileRule.Result result = new SavefileRule.Result(context, data[FILE_NAME], Integer.parseInt(data[FILE_SIZE]));
|
SavefileRule.Result result = new SavefileRule.Result(context, data[FILE_NAME], Integer.parseInt(data[FILE_SIZE]));
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,7 +103,6 @@ public class SavefileRule extends ProtocolReader {
|
|||||||
ProtocolReader.ProtocolResult result = new ProtocolReader.ProtocolResult(context);
|
ProtocolReader.ProtocolResult result = new ProtocolReader.ProtocolResult(context);
|
||||||
// Commande renvoyée en cas d'erreur
|
// Commande renvoyée en cas d'erreur
|
||||||
result.setResultCommand(protocolRep.executeWriter(context, SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
result.setResultCommand(protocolRep.executeWriter(context, SaveFileErrorRule.NAME), ResultCmdReceiver.CLIENT);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ package lightcontainer.storage;
|
|||||||
* @since 1.0
|
* @since 1.0
|
||||||
*/
|
*/
|
||||||
public class AppConfig {
|
public class AppConfig {
|
||||||
|
// Variables
|
||||||
private static AppConfig instance = null;
|
private static AppConfig instance = null;
|
||||||
private int unicastPort;
|
private int unicastPort;
|
||||||
private String multicastIp;
|
private String multicastIp;
|
||||||
@ -98,7 +98,6 @@ public class AppConfig {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Méthode permettant d'assigner le chemin de sauvegarde des fichiers
|
* Méthode permettant d'assigner le chemin de sauvegarde des fichiers
|
||||||
* @return Chemin de sauvegarde
|
|
||||||
*/
|
*/
|
||||||
public void setStoragePath(String storagePath) {
|
public void setStoragePath(String storagePath) {
|
||||||
this.storagePath = storagePath;
|
this.storagePath = storagePath;
|
||||||
|
@ -7,13 +7,11 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
public class FileReceiver {
|
public class FileReceiver {
|
||||||
private static final int DEFAULT_BUFFER = 8000;
|
|
||||||
private String path;
|
private String path;
|
||||||
|
|
||||||
public FileReceiver(String path) { this.path = path; }
|
public FileReceiver(String path) { this.path = path; }
|
||||||
|
|
||||||
public boolean receiveFile(InputStream input, String fileName, int fileSize, String key, String iv) {
|
public boolean receiveFile(InputStream input, String fileName, int fileSize, String key, String iv) {
|
||||||
int bytesReceived = 0;
|
|
||||||
BufferedOutputStream bosFile = null;
|
BufferedOutputStream bosFile = null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -32,6 +32,11 @@ public class SHA {
|
|||||||
new FileInputStream(inFile),
|
new FileInputStream(inFile),
|
||||||
(int)inFile.length()
|
(int)inFile.length()
|
||||||
));
|
));
|
||||||
|
|
||||||
|
System.out.println(hashFile( // caca5439dc02f2ced5094e95f1a3403d42127cda29feecd2eb1c68ff38a6fee3
|
||||||
|
"D:\\ffe",
|
||||||
|
"46ba86ddecd2fe80c3bdb9fb2f9480b4c92057447e9d1b43863dd1a6d540f3a316571684f9e3a7459f533a9792d4925e"
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -69,6 +74,25 @@ public class SHA {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Make a borrowing of the file.
|
||||||
|
*
|
||||||
|
* @param rootPath Root path of the file.
|
||||||
|
* @param fileName File Name.
|
||||||
|
*
|
||||||
|
* @return Borrowing of the file.
|
||||||
|
*
|
||||||
|
* @throws ShaException if an error occur.
|
||||||
|
*/
|
||||||
|
public static String hashFile(String rootPath, String fileName) throws ShaException {
|
||||||
|
try {
|
||||||
|
File file = new File(String.format("%s/%s", rootPath, fileName));
|
||||||
|
return hashStream(new FileInputStream(file), (int)file.length());
|
||||||
|
} catch (Exception e) {
|
||||||
|
throw new ShaException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal Error from SHA encryption Class
|
* Internal Error from SHA encryption Class
|
||||||
*/
|
*/
|
||||||
|
@ -54,7 +54,6 @@ public class ShaHasher {
|
|||||||
return generatedText;
|
return generatedText;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private byte[] generateSalt() {
|
private byte[] generateSalt() {
|
||||||
this.salt = new byte[16];
|
this.salt = new byte[16];
|
||||||
SecureRandom random = new SecureRandom();
|
SecureRandom random = new SecureRandom();
|
||||||
@ -63,7 +62,6 @@ public class ShaHasher {
|
|||||||
return salt;
|
return salt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getSalt() {
|
public String getSalt() {
|
||||||
Base64.Encoder b64Encoder = Base64.getEncoder();
|
Base64.Encoder b64Encoder = Base64.getEncoder();
|
||||||
return b64Encoder.encodeToString(this.salt);
|
return b64Encoder.encodeToString(this.salt);
|
||||||
|
@ -1,27 +1 @@
|
|||||||
{
|
{"unicast_port":8000,"multicast_ip":"226.66.66.1","multicast_port":15502,"network_interface":"My network interface","tls":true,"storagePath":"D:\\ffe","users":[{"name":"endmove","password":"1f82407cace28cd7d97d23f82e8235d9da97575d033a12334fc71d3517f6a90fa04af829df3c722c38d3b68842e4ca2b","aes_key":"p0G+iViPp656O6aMKgcXSDT/e9/00wQH/ztUWf4tyr4=","passwordSalt":"ItYiXkwPa84Gwb6dGHQvXQ==","files":[{"name":"096a4b2f5673e1f1e1f4cb7e1a569f06cc31064f5dd254948f5d7c44769fd02a098f48ce60c333fae14cfcb29cacc87e","fileNameSalt":"v9ByBhvxds33+6Ha7c8oPQ==","size":12648,"iv":"OM9l2Rt6dqLDsGS3bQuuEQ==","storage":["lightcontainerSB01"]}]},{"name":"aaaaa","password":"5d628c274ebb008324f1e199d3bfff0a3fe839730a7f2355e82850d7acca5e5ca64db9071abf3d91034295695f84a617","aes_key":"qlTH6TijnfMRnrS0Qf+k6IPKGp5LoRMXGxCq16e+mF4=","passwordSalt":"Ns8Al6DpqPsIDlCSRBVTEg==","files":[]}]}
|
||||||
"unicast_port": 8000,
|
|
||||||
"multicast_ip": "226.66.66.1",
|
|
||||||
"multicast_port": 15502,
|
|
||||||
"network_interface": "My network interface",
|
|
||||||
"tls": true,
|
|
||||||
"storagePath": "/home/benjamin/ffe",
|
|
||||||
"users": [
|
|
||||||
{
|
|
||||||
"name": "aaaaa",
|
|
||||||
"password": "5d628c274ebb008324f1e199d3bfff0a3fe839730a7f2355e82850d7acca5e5ca64db9071abf3d91034295695f84a617",
|
|
||||||
"aes_key": "qlTH6TijnfMRnrS0Qf+k6IPKGp5LoRMXGxCq16e+mF4=",
|
|
||||||
"passwordSalt": "Ns8Al6DpqPsIDlCSRBVTEg==",
|
|
||||||
"files": [
|
|
||||||
{
|
|
||||||
"name": "ebf1d834055adf836823c46d36334edf24f40245948cff0173f999392d8429536ccd57bf82090807a6b9cb4317b1bf64",
|
|
||||||
"fileNameSalt": "zXjO49TAftzugcnyaw3myQ==",
|
|
||||||
"size": 854,
|
|
||||||
"iv": "2DLTOZ4SX9MhTd6JdqFkuw==",
|
|
||||||
"storage": [
|
|
||||||
"lightcontainerSB01"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user