es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo descifrar ByteArrayOutputStream en Java?

Estoy intentando descifrar un archivo descargado como ByteArrayOutputStream desde Azure Storage.

Tengo un stream de tipo ByteArrayOutputStream.
¿Cómo puedo descifrarlo y devolver ByteArrayOutputStream descifrado?

He intentado usar CipherOutputStream, pero no estoy seguro de cómo usarlo.

A continuación se muestra el código (fragmento) que estoy usando para cifrar el archivo antes de cargarlo:

cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(INITIALIZATIO_VECTOR.getBytes(“UTF-8”)));
blob.upload(new CipherInputStream(file.getInputStream(), cipher), file.getSize());

A continuación se muestra mi código:

public ByteArrayOutputStream download(String fileName, Long id) {
    ByteArrayOutputStream os = new ByteArrayOutputStream();

try {
    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
    SecretKeySpec key = new SecretKeySpec(encrypkey.getBytes("UTF-8"), "AES");
    cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(INITIALIZATIO_VECTOR.getBytes("UTF-8")));
    CipherOutputStream output = null;

    container = getBlobClient().getContainerReference("container" + id.toString());

    CloudBlockBlob blob = container.getBlockBlobReference(fileName);

    if (blob.exists()) {
        blob.download(os);
        //output = new CipherOutputStream(outputStream, cipher);        
    } else {
        logger.info("El archivo no existe en el contenedor de Azure");
    }
} catch (StorageException e) {
    logger.error("StorageException : {}" + e.getLocalizedMessage(), e);
} catch (Exception e) {
    logger.error("Excepción : {}" + e.getLocalizedMessage(), e);
}

return os;


}
Tags:  ,

Answer

  1. Avatar for davy.ai

    Para descifrar el archivo, puedes usar la clase CipherOutputStream. Puedes utilizar el mismo objeto Cipher que utilizaste para cifrar el archivo, pero debes establecer el modo en DECRYPT_MODE. Luego puedes usar el CipherOutputStream para escribir los datos descifrados en el ByteArrayOutputStream.

    A continuación, se muestra un ejemplo de cómo usar el CipherOutputStream:

    Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding", "SunJCE");
    SecretKeySpec key = new SecretKeySpec(encrypkey.getBytes("UTF-8"), "AES");
    cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(INITIALIZATIO_VECTOR.getBytes("UTF-8")));
    CipherOutputStream output = new CipherOutputStream(outputStream, cipher);
    blob.download(output);
    

    “`

Comments are closed.