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.

‘No se reconoce el algoritmo de hash MD5’ excepción al intentar cargar un blob en Azure Cloud.

Estoy intentando cargar un archivo en Azure utilizando un token SAS pero recibo este error mientras intento cargar el archivo:

MD5 no es un algoritmo hash conocido

Tengo estos 2 métodos que utilizo, uno para generar el enlace del archivo que se utilizará para cargar el archivo:

   public string GetBlobSASUploadFileLink(string fileName)
   {
       var connectionString = string.Format("DefaultEndpointsProtocol=https;AccountName={0};AccountKey={1}", StorageAccountName, AccessKey);
       var storageAccount = CloudStorageAccount.Parse(connectionString);
       CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
       CloudBlobContainer container = blobClient.GetContainerReference(FilesContainer);

       SharedAccessBlobPolicy sasConstraints = new SharedAccessBlobPolicy();
       sasConstraints.SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(5);
       sasConstraints.Permissions = SharedAccessBlobPermissions.Write | SharedAccessBlobPermissions.Create;

       var blob = container.GetBlockBlobReference(fileName);
       return string.Format("{0}{1}", blob.Uri, blob.GetSharedAccessSignature(sasConstraints));
   }

Y este método donde también se produce la excepción, que debería cargar el archivo en Azure:

public async Task UploadFilesToBlob(string fileLink, IBrowserFile file)
{
    try
    {
        var cloudBlockBlob = new CloudBlockBlob(new Uri(fileLink));
        await cloudBlockBlob.UploadFromStreamAsync(file.OpenReadStream(912000000));
    }
    catch (Exception ex)
    {

    }
}

En este segundo método, se produce la excepción en el método UploadFromStreamAsync. Supongo que el marco utiliza el algoritmo MD5 pero Azure utiliza otro algoritmo de hash criptográfico, pero no sé qué se debe hacer.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que se está produciendo el error “MD5 no es un algoritmo de hash conocido” al intentar subir un archivo a Azure utilizando un token de acceso compartido (SAS). Este error probablemente se debe al hecho de que la nube de Azure utiliza un algoritmo de hash criptográfico diferente al MD5. Para resolver este problema, debemos modificar el método UploadFilesToBlob para proporcionar el algoritmo de hash adecuado para Azure.

    Una posible solución es agregar un parámetro adicional al método UploadFromStreamAsync para indicar el tipo de algoritmo de hash que se va a utilizar. Por ejemplo, podemos modificar el método UploadFilesToBlob de la siguiente manera:

    public async Task UploadFilesToBlob(string fileLink, IBrowserFile file)
    {
        try
        {
            var cloudBlockBlob = new CloudBlockBlob(new Uri(fileLink));
            cloudBlockBlob.Properties.ContentMD5 = GetFileHash(file);
            await cloudBlockBlob.UploadFromStreamAsync(file.OpenReadStream(912000000), null, new BlobRequestOptions{StoreBlobContentMD5 = true}, null);
        }
        catch (Exception ex)
        {
            // Manejar la excepción aquí
        }
    }
    
    private string GetFileHash(IBrowserFile file)
    {
        using (var md5 = MD5.Create())
        {
            var stream = file.OpenReadStream(912000000);
            var hash = md5.ComputeHash(stream);
            return Convert.ToBase64String(hash);
        }
    }
    

    En la versión modificada de UploadFilesToBlob, establecemos la propiedad ContentMD5 del objeto CloudBlockBlob en el valor de hash calculado del archivo cargado, que se obtiene llamando al método GetFileHash. Luego llamamos al método UploadFromStreamAsync con un objeto BlobRequestOptions, que tiene la propiedad StoreBlobContentMD5 establecida en true para indicar que el valor de hash debe almacenarse con el blob.

    En el método GetFileHash, calculamos el valor de hash del archivo cargado utilizando el método MD5.Create() y calculamos el valor de hash del flujo de entrada. Finalmente, convertimos el valor de hash a una cadena codificada en Base64 y lo devolvemos.

    Con estas modificaciones, el método UploadFilesToBlob debería poder cargar archivos en Azure sin errores relacionados con algoritmos de hash no admitidos.

Comments are closed.