Compartilhar via


CA1850: preferir o método estático HashData em vez de ComputeHash

Property Valor
ID da regra CA1850
Título Prefira o método estático HashData ao ComputeHash
Categoria Desempenho
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 10 Como sugestão

Causa

Uma instância de um tipo derivado de HashAlgorithm é criada para chamar o método ComputeHash e esse tipo possui um método estático HashData.

Descrição da regra

Os métodos estáticos HashData foram introduzidos no .NET 5 nos seguintes tipos:

Esses métodos ajudam a simplificar o código nos casos em que você deseja apenas aplicar hash a alguns dados.

É mais eficiente usar esses métodos estáticos HashData do que criar e gerenciar uma HashAlgorithm instância para chamar ComputeHash.

Como corrigir violações

Em geral, é possível corrigir a regra alterando o código para chamar HashData e remover o uso da instância HashAlgorithm.

public bool CheckHash(byte[] buffer)
{
  using (var sha256 = SHA256.Create())
  {
    byte[] digest = sha256.ComputeHash(buffer);
    return DoesHashExist(digest);
  }
}
Public Function CheckHash(buffer As Byte()) As Boolean
  Using sha256 As SHA256 = SHA256.Create()
    Dim digest As Byte() = sha256.ComputeHash(buffer)
    Return DoesHashExist(digest)
  End Using
End Function

O código anterior pode ser alterado para chamar o método estático HashData(Byte[]) diretamente.

public bool CheckHash(byte[] buffer)
{
    byte[] digest = SHA256.HashData(buffer);
    return DoesHashExist(digest);
}
Public Function CheckHash(buffer As Byte()) As Boolean
  Dim digest As Byte() = SHA256.HashData(buffer)
  Return DoesHashExist(digest)
End Function

Quando suprimir avisos

É seguro suprimir um aviso dessa regra.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

#pragma warning disable CA1850
// The code that's violating the rule is on this line.
#pragma warning restore CA1850

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA1850.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Confira também