‘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.
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étodoUploadFilesToBlob
de la siguiente manera:En la versión modificada de
UploadFilesToBlob
, establecemos la propiedadContentMD5
del objetoCloudBlockBlob
en el valor de hash calculado del archivo cargado, que se obtiene llamando al métodoGetFileHash
. Luego llamamos al métodoUploadFromStreamAsync
con un objetoBlobRequestOptions
, que tiene la propiedadStoreBlobContentMD5
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étodoMD5.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.