¿Cómo puedo proteger mejor la contraseña IV y la clave en este cliente de servidor javax.crypto?

Durante unos días he leído este y otros tutoriales sobre javax.crypto
Uso de modos de bloque y vectores de inicialización en Java

Mi código de prueba a continuación es un Cliente que envía datos a un Servidor.

Leí sobre diferentes modos de bloque y el modo de transmisión CFB8 parece estar funcionando porque dividí archivos de tamaño arbitrario en trozos. Cada fragmento es de 0,5 MB, excepto el último fragmento que es más pequeño, se envían uno tras otro al servidor que vuelve a armar el archivo.

Tengo algunas preguntas:

1) ¿Debo usar las claves publ / priv de criptografía asimétrica para enviar la contraseña de SecretKeySpec y el IV al servidor antes de comenzar la transferencia?

2) ¿Para qué se utiliza la contraseña SecretKeySpec, proteger el IV?

EL CLIENTE encripta datos

Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding"); 
SecretKeySpec keySpec = new SecretKeySpec("password12345678".getBytes(), "AES");
cipher.init(Cipher.ENCRYPT_MODE, keySpec);

AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();

out.write(iv); //Send IV to Server
out.flush();

// THE ENCRYPTET STREAM
cos = new CipherOutputStream(out, cipher);  

while ((val = byteArrayInputStream.read(buffer, 0, 1024)) > 0) {
       cos.write(buffer, 0, val);
       cos.flush();
}

cipher.doFinal()

EL SERVIDOR descifra datos

    byte[] iv = new byte[16];
    in.read(iv);

    Cipher cipher = Cipher.getInstance("AES/CFB8/NoPadding"); 
    SecretKeySpec keySpec = new SecretKeySpec("password12345678".getBytes(), "AES");
    IvParameterSpec ivSpec = new IvParameterSpec(iv);
    cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);

    cos = new CipherInputStream(in, cipher);        

   while (offset < tmpBuffer.length && (numRead=cos.read(tmpBuffer, offset,      tmpBuffer.length-offset)) >= 0) {
      offset += numRead;
      savedFileSize = savedFileSize + numRead;
   }    
   // CREATE HASH FROM THE DOWNLOAD CHUNK PART
   String retCrC = DoEncryption.getCRC32ChecksumFromArray(tmpBuffer);
   String hash2 = Long.toHexString( Long.parseLong(retCrC) );

   // TEST SO THE REMOTE HASH MATCH THE LOCAL HASH
   if(!hash1.equals(hash2)){
   ...
Respuesta 1

Por lo general, uno protege el IV al incluirlo en el HMAC.

Respuesta: 2

Tengo esta cadena en la variable java como String t = "C: /clearpath/rafa.jpg"; Ahora quiero eliminar clearpath de la variable t y quiero almacenar en otra variable como String j = "C: //rafa.jpg". Como am ...

Quiero crear un ListView que contenga Cada elemento tiene una identificación y un nombre. ¿Hay alguna forma de mostrar cada elemento en un cuadro rectangular con borde?

La URL de mi controlador de arranque de primavera no puede encontrar los recursos estáticos (css, js, etc.) al redirigir a una url diferente (página de error) URL del controlador: http: // localhost: 8080 / document / {someId} Redirect .. .

Utilicé el siguiente código al inicializar mis controles deslizantes: // Obtiene el valor del control deslizante correspondiente, a partir de su valor representado. int curr = valueToSlider (min, max, current, scale, q, grains); JSlider final ...