Skip to content

Commit

Permalink
Criptografia simétrica (com cliente gerando as 4 chaves) adicionada
Browse files Browse the repository at this point in the history
  • Loading branch information
TroniPM committed Dec 1, 2017
1 parent 83948a6 commit f25412f
Show file tree
Hide file tree
Showing 27 changed files with 111 additions and 1,348 deletions.
2 changes: 1 addition & 1 deletion nbproject/private/private.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ do.depend=false
do.jar=true
javac.debug=true
javadoc.preview=true
user.properties.file=C:\\Users\\Matt\\AppData\\Roaming\\NetBeans\\8.2\\build.properties
user.properties.file=C:\\Users\\Mateus\\AppData\\Roaming\\NetBeans\\8.1\\build.properties
29 changes: 0 additions & 29 deletions src/entidades/GameRuntime.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.List;
import util.Session;

/**
Expand Down Expand Up @@ -101,32 +100,4 @@ public int compare(User o1, User o2) {
return (o1.pontuacao < o2.pontuacao) ? 1 : ((o1.pontuacao > o2.pontuacao) ? -1 : 0);
}
}

public String convertToString() {
try {
String str;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(this);
byte[] objeto = baos.toByteArray();
str = Base64.encode(objeto);
oos.close();
return str;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

public static GameRuntime convertFromString(String str) throws ClassNotFoundException {
try {
ByteArrayInputStream bais = new ByteArrayInputStream(Base64.decode(str));
ObjectInputStream ois = new ObjectInputStream(bais);
return (GameRuntime) ois.readObject();
} catch (IOException e) {
e.printStackTrace();
}
return null;

}
}
90 changes: 18 additions & 72 deletions src/entidades/network/Cliente.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,9 @@
import static entidades.network.Servidor.PORT_SERVER;
import entidades.network.sendible.EndRound;
import entidades.network.sendible.EndRoundArray;
import entidades.network.sendible.StepOne;
import entidades.network.sendible.StepTwo;
import entidades.network.sendible.User;
import entidades.network.sendible.UserArray;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.InvalidKeySpecException;
import java.util.logging.Level;
Expand All @@ -33,7 +27,6 @@
import security.KeyAutenticacaoServidor;
import security.KeyEncriptacaoCliente;
import security.KeyEncriptacaoServidor;
import security.Security;
import util.Methods;
import util.Session;

Expand Down Expand Up @@ -101,36 +94,36 @@ public void startScheme() throws IOException {
//Session.security.KEY = cs;
ChaveSessao cs = Session.security.KEY;
//Encapsulando chaves para envio
KeyAutenticacaoServidor kas = new KeyAutenticacaoServidor(cs.getAUTENTICACAO_SERVIDOR());
KeyAutenticacaoCliente kac = new KeyAutenticacaoCliente(cs.getAUTENTICACAO_CLIENTE());
KeyEncriptacaoServidor kes = new KeyEncriptacaoServidor(cs.getENCRIPTACAO_SERVIDOR());
KeyEncriptacaoCliente kec = new KeyEncriptacaoCliente(cs.getENCRIPTACAO_CLIENTE());
KeyAutenticacaoServidor kas = new KeyAutenticacaoServidor(cs.AUTENTICACAO_SERVIDOR);
KeyAutenticacaoCliente kac = new KeyAutenticacaoCliente(cs.AUTENTICACAO_CLIENTE);
KeyEncriptacaoServidor kes = new KeyEncriptacaoServidor(cs.ENCRIPTACAO_SERVIDOR);
KeyEncriptacaoCliente kec = new KeyEncriptacaoCliente(cs.ENCRIPTACAO_CLIENTE);

//Aviso ao servidor q vou iniciar
out.writeObject("start".getBytes());
out.flush();
//System.out.println("Enviou Start");
//Começo do envio de chaves
byte[] b1 = SerializationUtils.serialize(kas);
byte[] criptografa1 = security.Security.criptografa(b1, pub);
byte[] criptografa1 = security.Security.criptografaAssimetrica(b1, pub);
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(criptografa1);
out.flush();
Session.addLog("Enviou chave1");
byte[] b2 = SerializationUtils.serialize(kac);
byte[] criptografa2 = security.Security.criptografa(b2, pub);
byte[] criptografa2 = security.Security.criptografaAssimetrica(b2, pub);
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(criptografa2);
out.flush();
Session.addLog("Enviou chave2");
byte[] b3 = SerializationUtils.serialize(kes);
byte[] criptografa3 = security.Security.criptografa(b3, pub);
byte[] criptografa3 = security.Security.criptografaAssimetrica(b3, pub);
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(criptografa3);
out.flush();
Session.addLog("Enviou chave3");
byte[] b4 = SerializationUtils.serialize(kec);
byte[] criptografa4 = security.Security.criptografa(b4, pub);
byte[] criptografa4 = security.Security.criptografaAssimetrica(b4, pub);
out = new ObjectOutputStream(socket.getOutputStream());
out.writeObject(criptografa4);
out.flush();
Expand Down Expand Up @@ -169,27 +162,9 @@ public void communicateWaitingRoomEnter() throws IOException {
/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(user),
Session.security.KEY.AUTENTICACAO_CLIENTE,
Session.security.KEY.ENCRIPTACAO_CLIENTE, "user");
Session.security.KEY.ENCRIPTACAO_CLIENTE);
/*SEGURANÇA*/

/*// Gera encriptação
byte[] encryp = Session.security.brincar(SerializationUtils.serialize(user),
Session.security.KEY.ENCRIPTACAO_CLIENTE);
// Gera Autenticação
byte[] auth = null;
try {
auth = Session.security.autenticacao(encryp, Session.security.KEY.AUTENTICACAO_CLIENTE);
} catch (DataLengthException ex) {
Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvalidCipherTextException ex) {
Logger.getLogger(Cliente.class.getName()).log(Level.SEVERE, null, ex);
}
// Cria um Package para enviar
security.Package p = new security.Package(auth, encryp, Session.security.TAG,
Session.security.TAG_NUMBER++, "user");
// Converte o Package em um array de bytes
byte[] data = SerializationUtils.serialize(p);*/
// Enviando dados
out.writeObject(data);
a = "Enviado User [OBJECT] para " + Session.masterIP + ":" + PORT_SERVER;
Session.addLog(a);
Expand Down Expand Up @@ -221,7 +196,7 @@ public void sv_communicateStartGame(String ip, GameRuntime obj,
/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(obj),
Session.security.KEY.AUTENTICACAO_CLIENTE,
Session.security.KEY.ENCRIPTACAO_CLIENTE, "gameruntime");
Session.security.KEY.ENCRIPTACAO_CLIENTE);
/*SEGURANÇA*/

out.writeObject(data);
Expand All @@ -247,8 +222,8 @@ public void sv_communicateStartGame(String ip, GameRuntime obj,
* @return
*/
public byte[] generatePackage(byte[] data, SecretKey autenticacao,
SecretKey encriptacao, String tag) {
byte[] encryp = Session.security.brincar(data, encriptacao);
SecretKey encriptacao) {
byte[] encryp = Session.security.criptografaSimetrica(data, encriptacao);
// Gera Autenticação
byte[] auth = null;
try {
Expand All @@ -260,7 +235,7 @@ public byte[] generatePackage(byte[] data, SecretKey autenticacao,
}
// Cria um Package para enviar
security.Package p = new security.Package(auth, encryp, Session.security.TAG,
Session.security.TAG_NUMBER++, tag);
Session.security.TAG_NUMBER++);
// Converte o Package em um array de bytes
byte[] d = SerializationUtils.serialize(p);

Expand All @@ -286,7 +261,7 @@ public void communicateAnswersFromClient(EndRound obj) {
/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(obj),
Session.security.KEY.AUTENTICACAO_CLIENTE,
Session.security.KEY.ENCRIPTACAO_CLIENTE, "endround");
Session.security.KEY.ENCRIPTACAO_CLIENTE);
/*SEGURANÇA*/

out.writeObject(data);
Expand Down Expand Up @@ -321,7 +296,7 @@ public void communicateAswersValidatedFromClient(ArrayList<User> obj) {
/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(g),
Session.security.KEY.AUTENTICACAO_CLIENTE,
Session.security.KEY.ENCRIPTACAO_CLIENTE, "userarray");
Session.security.KEY.ENCRIPTACAO_CLIENTE);
/*SEGURANÇA*/

out.writeObject(data);
Expand Down Expand Up @@ -361,8 +336,7 @@ public void sv_communicateStartRound(String ip, GameRuntime obj,

/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(obj),
Session.security.KEY.AUTENTICACAO_CLIENTE,
Session.security.KEY.ENCRIPTACAO_CLIENTE, "gameruntime");
autenticacao, encriptar);
/*SEGURANÇA*/

out.writeObject(data);
Expand Down Expand Up @@ -406,7 +380,7 @@ public void sv_communicateStartValidation(String ip, ArrayList<EndRound> obj,

/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(g),
autenticacao, encriptar, "endroundarray");
autenticacao, encriptar);
/*SEGURANÇA*/

out.writeObject(data);
Expand Down Expand Up @@ -447,7 +421,7 @@ public void sv_communicateScoresToClient(String ip, ArrayList<User> obj,
UserArray g = new UserArray(obj);
/*SEGURANÇA*/
byte[] data = generatePackage(SerializationUtils.serialize(g),
autenticacao, encriptar, "userarray");
autenticacao, encriptar);
/*SEGURANÇA*/

out.writeObject(data);
Expand All @@ -460,32 +434,4 @@ public void sv_communicateScoresToClient(String ip, ArrayList<User> obj,
se.printStackTrace();
}
}

public void deletar_isso_daqui(String ip) {
try {
String a = "sv_communicateStepOne: Começando comunicação com " + ip + ":" + PORT_CLIENT;
Session.addLog(a);
//Não deixo enviar para o mesmo ip da máquina servidor.
if (ip.equals(Session.masterIP)) {
return;
}
Socket socket = new Socket(ip, PORT_CLIENT);
ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
a = "Conectado a " + ip + ":" + PORT_CLIENT;
Session.addLog(a);

String g = Session.security.passo1.convertToString();

out.writeObject(g.getBytes());

a = "Enviado StepOne [OBJECT] para" + ip + ":" + PORT_CLIENT;
Session.addLog(a);

out.close();
} catch (SocketException se) {
se.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
20 changes: 0 additions & 20 deletions src/entidades/network/DataNetworkManager.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
package entidades.network;

import static entidades.GameRuntime.PONTO_BONIFICACAO_POR_VELOCIDADE;
import static entidades.GameRuntime.PONTO_POR_ACERTO;
import java.util.ArrayList;
import entidades.network.sendible.EndRound;
import entidades.network.sendible.User;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import util.Session;

/**
Expand Down Expand Up @@ -41,20 +35,6 @@ public static ArrayList<User> cl_calculateScore() {
}
}

//System.out.println("\n\n####################");
//System.out.println("CALCULANDO PONTUAÇÃO");
//System.out.println("Usuário: " + auxUser.nickname);
//System.out.println("Ip: " + auxUser.ip);
//System.out.println("Pontuação: " + pontos);
//System.out.println("####################");

/*Faço esse if para o caso de usuário não inserir nada. Ele ganharia pontos
só pelo fato de ter enviado primeiro. Então se ele não pontuou nad ano round,
não ganha a pontuação extra.*/
//TODO
/*if (pontos != 0) {
pontos += PONTO_BONIFICACAO_POR_VELOCIDADE * (arrayAux.size() - i);
}*/
auxUser.pontuacao = pontos;

user.add(auxUser);
Expand Down
Loading

0 comments on commit f25412f

Please sign in to comment.