Wednesday 13 December 2017

Checksum binary options


16 de setembro de 2007 às 4:59 am 183 Arquivado em SQL Server SQL Server tem a função CHECKSUM () (e BINARYCHECKSUM ()) para gerar valores de hash. Esta é uma função de hash simples que mapeia valores de entrada para um valor INTEIRO de 32 bits. CHECKSUM () e BINARYCHECKSUM () diferem na forma como tratam as entradas do tipo de dados de cadeia, consulte o tópico BINARYCHECKSUM () no BOL para obter mais informações. Quando você pode usar uma função hash Funções hash são uma opção útil para melhorar a eficiência de consultas específicas em grandes volumes de dados. Por exemplo, em cadeias longas de texto, você pode criar um índice de hash para realizar pesquisas eficientes ou acelerar operações agregadas. Os valores de hash gerados para uma linha inteira são úteis para pesquisar eficientemente as diferenças entre linhas nas tabelas. Funções hash têm muitos outros usos que estão além do escopo deste post. Um problema com CHECKSUM () é que a probabilidade de uma colisão (gerando o mesmo valor de saída para dois valores de entrada diferentes) pode não ser suficientemente baixa para todas as aplicações não é muito difícil encontrar exemplos de duas entradas diferentes com hashing para a mesma saída valor. Naturalmente, as colisões são possíveis com qualquer função que tenha um domínio maior do que o seu intervalo (por definição), é apenas que a probabilidade com CHECKSUM () é um pouco demasiado alto para viver com muitas aplicações. Por exemplo, o script a seguir mostra um exemplo de dois valores UNIQUEIDENTIFIER que hash para o mesmo valor: DECLARE guid1 UNIQUEIDENTIFIER. Guid2 UNIQUEIDENTIFIER SELECT guid1 82173DB7D309-A8F4-47C4-BA90-0CB458B44CB08242. GUI2 () Este é um ponto fraco particular com CHECKSUM () (e BINARYCHECKSUM ()), uma vez que tem apenas 2 32 possíveis valores de saída. É trivial encontrar outros exemplos pela força bruta. Se você está ou não preocupado com colisões com CHECKSUM () depende um pouco dos requisitos do seu aplicativo. Para pesquisas (através do índice de hash), as colisões não são geralmente tão dispendiosas, desde que a pesquisa inicial elimine a grande proporção de linhas. No entanto, para agregados em um grande conjunto de dados, as colisões eliminam a utilidade da função de hashing e, portanto, são muito caras. Você pode executar CHECKSUM () duas vezes, contra o valor de entrada e seu inverso, gerando um valor de saída combinado de 64 bits. Isso reduz a probabilidade de uma colisão. Tomando os dois anteriores colidindo UNIQUEIDENTIFIER valores do exemplo anterior: DECLARE guid1 UNIQUEIDENTIFIER. Guid2 UNIQUEIDENTIFIER SELECT guid1 82173DB7D309-A8F4-47C4-BA90-0CB458B44CB08242. CONVERT (BINARY, CONVERT (BINARY (4), CHECKSUM (REVERSO (guid1))) CONVERT (BINARY (4), CHECKSUM (guid1))). Chksumguid2 CONVERT (BINARY (4), CHECKSUM (REVERSE (guid2))) CONVERT (BINARY (4), CHECKSUM (guid2))) A função HASHBYTES () foi introduzida com o SQL Server 2005. Esta função fornece a opção Para especificar uma seleção de algoritmos de hash diferente e comparado a CHECKSUM (). Para MD5 e SHA1 em particular, é muito menos provável que resulte em uma colisão para diferentes entradas (BOL menciona isso no tópico CHECKSUM ()) MD5 emite um valor de 128 bits e SHA1 emite um valor de 160 bits, dando 2 128 e 2 160 valores de saída possíveis respectivamente.

No comments:

Post a Comment