Encriptación de claves en java

Necesito urgente en netbeans hacer estos dos ejercicios, a ver si me ayudais:

1- Hacer un programa que lea un fichero de entrada con el siguiente formato:

nomusuario1:clave1: /nomusuario2:clave2:/nomusuario3:clave3: /nomusuario4:clave4:
y nos genere un fichero con el siguiente formato:
nomusuario1:aleatorio de 6 cifras:[hash md5 en base64 de la clave concatenada con el numero aleatorio]:
nomusuario2:aleatorio de 6 cifras:[hash md5 en base64 de la clave concatenada con el numero aleatorio]:
nomusuario3:aleatorio de 6 cifras:[hash md5 en base64 de la clave concatenada con el numero aleatorio]:
nomusuario3:aleatorio de 6 cifras:[hash md5 en base64 de la clave concatenada con el numero aleatorio]:
2- Hacer un programa que pida un usuario de la lista del fichero anterior y una clave. Accediendo al segundo fichero ha de comprobar si la clave es correcta o no.

1 Respuesta

Respuesta
1

Pues te respondo por preguntas:

  1. Esta primera sería usar una amalgama de herramientas y librerías:
    1. FileInputStream para leer el fichero y FileOutputStream para escribir el nuevo fichero.
      https://www.tutorialspoint.com/java/java_files_io.htm
    2. String. Split(Pattern) para separar la entrada del fichero en un array de usuario clave:
      String string = "123-654321";
      String[] parts = string.split("-");
      String part1 = parts[0]; // 123
      String part2 = parts[1]; // 654321
    3. MessageDigest para codificar en MD5:
      import java.nio.charset.StandardCharsets;
      import java.security.MessageDigest;
      import java.security.NoSuchAlgorithmException;
      public class MainClass {
          public static void main(String[] args) throws NoSuchAlgorithmException {
              String clave = "12345";
              MessageDigest digest = MessageDigest.getInstance("MD5");
              byte[] hash = digest.digest(clave.getBytes(StandardCharsets.UTF_8));
              System.out.println("Clave Codificada => " + new String(hash, StandardCharsets.UTF_8)); // Clave Codificada => ?|??plL4?h??N{
          }
      }
    4. Base64 y Base64.Encoder para codificar en Base64:
      import java.nio.charset.StandardCharsets;
      import java.util.Base64;
      import java.util.Base64.Encoder;
      public class Main {
         public Main() {
            String nombre = "Carlos";
            Encoder encoder = Base64.getEncoder();
            String nombreCodificado = encoder.encodeToString(nombre.getBytes(StandardCharsets.UTF_8));
            System.out.println("Nombre Codificado => " + nombreCodificado); // Nombre Codificado => Q2FybG9z
         }
      }
  2. Para esta segunda parte supongo que simplemente tendrás que leer nuevamente, seleccionar del Array de String el que te han solicitado, encriptarlo y comparar con el resultado que tienes en el segundo fichero ya que lo que encriptes, si no me equivoco, siempre permanecerá igual. Para que me entiendas, si encripto una vez "12345" y me sale "?|??plL4?h??N{}" la siguiente vez que lo encripte me saldrá lo mismo.

buenas noches

el profe me dice esto:

El fichero de texto que se ha de leer lo creas con el notepad, por ejemplo, y puede tener todas las li­neas que se quiera, siguiendo ese formato. No hay que encriptar las claves ni desencriptarlas. Hay que generar por cada li­nea del primer fichero otra linea en el fichero de salida, con el formato:

 nomUsuario:numero aleatorio de 6 cifras:Base64.encode(MD5(clave+aleatorio anterior)):

 El aleatorio simplemente: (int)(Math.random()*1000000)

 Como la clave es un string, al sumarle el aleatorio da otro string.

 No confundir hacer el hash de algo con cifrar, pues con el hash no se puede volver al valor original.

 Saludos,

grcs por la ayuda

Mm, es cierto lo del Hash, no me había quedado muy claro.

No se si pueda ayudar mucho pero igual intentar sacar el Checksum:

https://stackoverflow.com/questions/304268/getting-a-files-md5-checksum-in-java 

Otra opción, que no creo que sea lo que tienes que hacer, es crackear el Hash.

Si esto no te ayuda no creo que pueda ayudarte mucho más, no soy experto en la parte de seguridad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas