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 longas seqüências de texto, você pode criar um índice de hash para realizar pesquisas eficientes ou acelerar as 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. As funções Hash têm muitos outros usos que estão além do escopo desta publicação. 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 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 elevado 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. Guid2 8216EFE7F2C5-19F9-42B9-9C16-21BED41E882B8217 SELECCIONAR chksumguid1 CHECKSUM (guid1), chksumguid2 CHECKSUM (guid2) Esta é uma fraqueza 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 (via hash index), as colisões geralmente não são tão onerosas, desde que a pesquisa inicial elimina 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. Guid2 8216EFE7F2C5-19F9-42B9-9C16-21BED41E882B8217 SELECCIONAR chksumguid1 CONVERT (BIGINT. CONVERT (BINARY (4), CHECKSUM (REVERSE (guid1))) CONVERT (BINARY (4), CHECKSUM (guid1))). Chksumguid2 CONVERT (BIGINT. 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 dá a opção Para especificar uma seleção de diferentes algoritmos hash 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 ()). O MD5 produz um valor de 128 bits e SHA1 produz um valor de 160 bits, oferecendo 2 128 e 2 160 possíveis valores de saída respectivamente. CHECKSUM Funções no SQL Server 2005 Por: Jeremy Kadlec Leia comentários (5) Dicas relacionadas: Mais funções - Problema do sistema Determinar se duas linhas ou expressões são iguais podem ser um processo difícil e com recursos intensivos. Isso pode ser o caso com instruções UPDATE onde a atualização foi condicional com base em todas as colunas sendo iguais ou não para uma linha específica. Para atender a essa necessidade no SQL Server ambiente o CHECKSUM. As funções CHECKSUMAGG e BINARYCHECKSUM estão disponíveis no SQL Server 2005 para criar nativamente uma expressão, linha ou tabela exclusiva para comparação ou outras necessidades de aplicativos. Nesta dica vamos nos concentrar nas questões comuns relacionadas ao código CHECKSUM e fornecer um exemplo para começar a alavancar os comandos CHECKSUM em seu código T-SQL. Solução Qual é o propósito do uso da funcionalidade CHECKSUM O CHECKSUM destina-se a criar um índice hash com base em uma lista de expressões ou colunas. Quando eu usaria a função CHECKSUM Um exemplo de usar um CHECKSUM é armazenar o valor exclusivo para toda a linha em uma coluna para comparação posterior. Isso seria útil em uma situação em que todas as linhas em uma tabela precisam ser comparadas, a fim de executar um UPDATE. Sem um CHECKSUM, você precisaria fazer o seguinte: Compare o código UPDATE do primeiro exemplo para este usando a função CHECKSUM. Para que essa consulta seja bem-sucedida, é necessário construir o valor CHECKSUM antecipadamente ao inserir os dados para realizar a comparação no código subseqüente. Portanto, se o seu desempenho muito poucas linhas inteiras (ou apenas sobre cada coluna na linha) comparações, em seguida, ad-hoc comparações podem ser otimizado. No entanto, se um número significativo de comparações for feito com um grande número de colunas, então essa opção deve ser pesquisada mais e testada para melhorias de desempenho em relação a comparações individuais delineadas no primeiro conjunto de código. Quais são algumas das advertências com o uso de qualquer uma das funções CHECKSUM Necessidade de garantir a coluna ou ordem de expressão é o mesmo entre os dois CHECKSUMs que estão sendo comparados. Não recomendaria CHECKSUM () porque o valor CHECKSUM gerado é baseado na ordem das colunas para a definição da tabela no tempo de execução que pode mudar com o tempo, então eu recomendaria definir explicitamente a lista de colunas com uma ordem estática no código CHECKSUM. Por exemplo, utilize CHECKSUM (Col1, Col2, Col3) onde estas são todas as colunas de uma tabela em oposição a CHECKSUM (). Necessidade de garantir que se uma coluna datetime ou valor está incluído no CHECKSUM que é é igual entre as 2 expressõescolumns porque se o datetime estiver desligado por até mesmo um segundo os valores CHECKSUM serão diferentes. Na próxima vez que você precisar comparar as características exclusivas de uma expressão, colunas ou uma tabela considere os recursos nativos disponíveis com CHECKSUM. Funções CHECKSUMAGG e BINARYCHECKSUM. Se você tiver código UPDATE onde muitas colunas são comparadas para determinar se os dados são exclusivos, considere alterar o código de usar WHERE Col1 Col2, etc. para criar o CHECKSUM e compare os valores CHECKSUM. Fique atento às dicas sobre as funções CHECKSUMAGG e BINARYCHECKSUM com mais formas de implementá-las no seu código. Última atualização: 7192006 A Microsoft recomenda usar HASHBYTES com o algoritmo MD5 para evitar o problema de hashcodes idênticos sendo criado. No entanto, há uma pequena chance de que a soma de verificação não mude. Por esse motivo, não recomendamos usar CHECKSUM para detectar se os valores foram alterados, a menos que seu aplicativo pode tolerar ocasionalmente falta uma alteração. Considere usarHashBytesinstead. Quando um algoritmo de hash MD5 é especificado, a probabilidade de HashBytes retornar o mesmo resultado para duas entradas diferentes é muito menor que a de CHECKSUM. Sexta-feira, 04 de abril de 2008 - 7:10:12 AM - admin Concordou que os hashes podem ser os mesmos em duas linhas diferentes. Você pode incluir ou excluir colunas particulares para ver se o hash ainda atende às suas regras de negócios e será exclusivo. Obrigado, The MSSQLTips Team. Quinta-feira, 03 de abril de 2008 - 10:48:57 AM - glauco. basilio. Procuro uma solução de checagem de insucesso e Binarychecksum para identificar linhas duplicadas no meu banco de dados. Se você tiver uma tabela com uma grande quantidade de linhas, verá que ambas as funções geram o mesmo quothashquot para linhas com diferentes dados. Terça-feira, 11 de março de 2008 - 6:57:26 PM - aprato Na seção Comentários do SQL 2005 BOL, esse CHECKSUM aplicado sobre qualquer duas listas de expressões retorna o mesmo valor se os elementos correspondentes das duas listas tiverem o mesmo Tipo e são iguais quando comparados usando o operador equals (). Para esta definição, os valores nulos de um tipo especificado são considerados como comparáveis. Se um dos valores na lista de expressão muda, a soma de verificação da lista também geralmente muda. No entanto, há uma pequena chance de que a soma de verificação não mude. Com base nas duas últimas frases, I39m não tem certeza da sua confiabilidade. Eu geralmente não o uso (na verdade, nunca usei). Você está usando isso para verificar mudanças de dados. Se assim for, talvez uma bandeira de tabela seja uma opção mais segura. Terça-feira, 11 de março de 2008 - 11:02:52 AM - papachec Eu usei a função de soma de verificação com sucesso por algum tempo. Recentemente, encontrei 2 casos em que uma lista diferente de valores produzia checksums idênticos. Gostaria de entender o cálculo que é feito pela soma de verificação 39 sob o capô39 para saber como isso é possível e como é seguro para continuar a usar 39checksum39. EXEMPLO: selecione checksum (39515256220439) produz 1726190947 selecione checksum (39515356220539) produz 1726190947 selecione checksum (39515256220539) produz 1726190963 selecione checksum (39515356220439) produz 1726190963 Eu esperava que eu obtivesse 4 resultados diferentes porque cada um dos 4 exemplos é uma lista diferente de Valores. Mas eu recebo apenas 2 resultados diferentes. Seus comentários e sugestões são bem-vindos.6.5 md5sum. Imprimir ou verificar MD5 digere md5sum calcula um checksum de 128 bits (ou impressão digital ou mensagem-digest) para cada arquivo especificado. Nota: O resumo MD5 é mais confiável do que um CRC simples (fornecido pelo comando cksum) para detectar corrupção acidental de arquivos, pois as chances de acidentalmente ter dois arquivos com MD5 idênticos são extremamente pequenas. No entanto, não deve ser considerado seguro contra manipulação maliciosa: embora encontrar um arquivo com uma determinada impressão digital MD5 seja considerado inviável no momento, sabe-se como modificar certos arquivos, incluindo certificados digitais, para que eles pareçam válidos quando assinados com um MD5 digest. Para hashes mais seguros, considere usar SHA-2. Veja os utilitários sha2. Se um arquivo for especificado como lsquo - rsquo ou se nenhum arquivo for dado md5sum calcula a soma de verificação para a entrada padrão. Md5sum também pode determinar se um arquivo e checksum são consistentes. Sinopse: Para cada arquivo. Lsquo md5sum rsquo saídas por padrão, a soma de verificação MD5, um espaço, uma bandeira indicando o modo de entrada binária ou de texto e o nome do arquivo. O modo binário é indicado com lsquo rsquo, modo de texto com lsquo rsquo (espaço). O modo binário é o padrão em sistemas onde itrsquos significativos, caso contrário, o modo de texto é o padrão. Se o arquivo contiver uma barra invertida ou nova linha, a linha é iniciada com uma barra invertida e cada caractere problemático no nome do arquivo é escapado com uma barra invertida, tornando a saída inequívoca mesmo na presença de nomes de arquivos arbitrários. Se o arquivo for omitido ou especificado como lsquo - rsquo, a entrada padrão é lida. O programa aceita as seguintes opções. Veja também Opções comuns. Trate cada arquivo de entrada como binário, lendo-o em modo binário e produzindo uma bandeira de lsquo rsquo. Este é o inverso de --texto. Em sistemas como o GNU que não distinguem entre arquivos binários e de texto, essa opção sinaliza apenas cada modo de entrada como binário: a soma de verificação MD5 não é afetada. Essa opção é padrão em sistemas como o MS-DOS que distinguem entre arquivos binários e de texto, exceto para leitura de entrada padrão quando a entrada padrão é um terminal. Lsquo - c rsquo lsquo --check rsquo Leia nomes de arquivos e informações de soma de verificação (não dados) de cada arquivo (ou de stdin se nenhum arquivo foi especificado) e informe se os checksums correspondem ao conteúdo dos arquivos nomeados. A entrada para este modo de md5sum é normalmente a saída de um anterior, checksum-gerando execução de lsquo md5sum rsquo. São suportados três formatos de entrada. O formato de saída padrão descrito acima, o formato de saída --tag ou o formato de modo invertido BSD que é semelhante ao modo padrão, mas doesnrsquot usa um caractere para distinguir modos binários e de texto. Para cada uma dessas linhas, o md5sum lê o arquivo nomeado e calcula sua soma de verificação MD5. Então, se o sumário da mensagem computada não coincide com o da linha com o nome do arquivo, o arquivo é notado como tendo falhado o teste. Caso contrário, o arquivo passa no teste. Por padrão, para cada linha válida, uma linha é gravada na saída padrão indicando se o arquivo nomeado passou no teste. Depois de todas as verificações terem sido executadas, se houve alguma falha, um aviso é emitido para erro padrão. Use a opção --status para inibir essa saída. Se qualquer arquivo listado não puder ser aberto ou lido, se qualquer linha válida tiver uma soma de verificação MD5 inconsistente com o arquivo associado ou se nenhuma linha válida for encontrada, md5sum sai com status diferente de zero. Caso contrário, ele sai com êxito. Lsquo --ignore-missing rsquo Esta opção é útil apenas quando se verificam as somas de verificação. Ao verificar checksums, donrsquot falhar ou relatar qualquer status para arquivos ausentes. Isso é útil ao verificar um subconjunto de arquivos baixados, dada uma lista maior de somas de verificação. Esta opção é útil apenas ao verificar somas de verificação. Ao verificar checksums, donrsquot gerar uma mensagem rsquoOKrsquo por arquivo verificado com êxito. Os arquivos que falham na verificação são relatados no formato padrão de uma linha por arquivo. Se houver uma incompatibilidade de soma de verificação, imprima um aviso que sintetiza as falhas no erro padrão. Esta opção é útil apenas ao verificar somas de verificação. Ao verificar checksums, donrsquot gerar o padrão um-line-por-arquivo de diagnóstico e donrsquot saída o aviso resumindo todas as falhas. Falhas ao abrir ou ler um arquivo ainda evocam diagnósticos individuais para erro padrão. Se todos os arquivos listados forem legíveis e consistentes com as somas de verificação MD5 associadas, saia com sucesso. Caso contrário, saia com um código de status indicando que houve uma falha. Saída de checksums de estilo BSD, que indicam o algoritmo de soma de verificação utilizado. Como uma extensão GNU, os nomes de arquivos com caracteres problemáticos são escapados como descrito acima, com o mesmo indicador de escape de lsquo rsquo no início da linha, sendo usado. A opção --tag implica modo binário e não é permitida com o modo de texto como suporte que complicaria desnecessariamente o formato de saída, proporcionando pouco benefício. Trate cada arquivo de entrada como texto, lendo-o no modo de texto e emitindo um sinalizador lsquo rsquo. Este é o inverso de binário. Esta opção é padrão em sistemas como GNU que não distinguem entre arquivos binários e de texto. Em outros sistemas, é o padrão para leitura de entrada padrão quando a entrada padrão é um terminal. Este modo nunca é predefinido para if --tag é utilizado. Ao verificar somas de verificação, alertar sobre formatado incorretamente MD5 checksum linhas. Esta opção é útil somente se todas as linhas, com exceção de algumas, na entrada selecionada forem válidas. Ao verificar as somas de verificação, se uma ou mais linhas de entrada forem inválidas, saia de zero depois de todos os avisos terem sido emitidos. Um estado de saída de zero indica sucesso e um valor diferente de zero indica falha. Como obter a soma de verificação MD5 para um arquivo: md5sum, digest, csum, certUtil Ao interagir com o suporte do WebSphere MQ (WMQ) em relação a um arquivo com uma correção provisória, você Foram solicitados a obter a soma de verificação MD5 para o arquivo. Você quer saber como obter a soma de verificação MD5. O que é uma soma de verificação MD5 Uma soma de verificação MD5 é um número hexadecimal de 32 caracteres que é computado em um arquivo. A soma de verificação MD5 ou digest ou hash tem sido amplamente utilizada no mundo do software para fornecer alguma garantia de que um arquivo transferido chegou intacto. Por exemplo, os servidores de arquivos geralmente fornecem um MD5 pré-calculado, de modo que um usuário pode comparar a soma de verificação do arquivo baixado para ele Se dois arquivos tiverem o mesmo valor de soma MD5, então há uma alta probabilidade de que os dois arquivos sejam os mesmos . Depois de baixar um pacote de instalação do software MQ, você pode calcular a soma de verificação MD5 no arquivo de instalação. A soma de verificação MD5 ou hash MD5 é uma alternativa mais segura para as somas de verificação obtidas a partir dos comandos quotsumquot ou quotcksumquot. Os comandos sum e cksum são utilitários de integridade de arquivos baseados em um mecanismo de verificação de redundância cíclica fraca (32 bits de largura), e este mecanismo é propenso a altas taxas de colisão. Para fins ilustrativos, um arquivo de uma máquina foi copiado como arquivo quotbinary. filequot em uma unidade compartilhada de rede e, em seguida, os seguintes testes foram realizados para obter a soma de verificação MD5 em diferentes plataformas. Em todos os casos a soma de verificação MD5 para este arquivo é: 0c4627e70d168f7f78257e6dd01fdb60 LINUX: md5sum fileName No Linux, o utilitário md5sum pode ser usado: aemtux1: md5sum binary. file 0c4627e70d168f7f78257e6dd01fdb60 binary. file Este utilitário é fornecido pelo seguinte pacote rpm (o nome do pacote é O elemento-chave, porque o número da versão depende da sua instalação do Linux) rpm - qf usrbinmd5sum coreutils-5.2.1-23.13 AIX: csum - h MD5 fileName No AIX, não há nenhum quotmd5sumquot nativo, mas a função hash MD5 é fornecida pelo csum Fornecido e suportado no AIX 5.3 e posterior): csum - h MD5 aemaix1: csum - h MD5 binário. file 0c4627e70d168f7f78257e6dd01fdb60 binary. file Nota: Pode ser necessário aplicar correções ao AIX para csum para manipular arquivos maiores que 2 GB. Por exemplo: IV03170: csum para suportar ficheiros com mais de 2 GB APLICATIVOS AO AIX 6100-07 Solaris: digest - a md5 - v fileName No Solaris não existe nenhum quotmd5sumquot nativo, mas quotdigestquot pode ser utilizado: aemsun4: digest - a md5 - v binário O pacote HP-UX MD5 Secure Checksum A.01.01.02 (nome do pacote MD5Checksum) fornece um utilitário de integridade de arquivos e um arquivo de configuração. API baseada no algoritmo padrão Message Digest 5 (MD5). O pacote MD5Checksum consiste nos seguintes dois componentes que podem ser instalados independentemente: - HP-UX MD5sum (comando checksum md5sum) - HP-UX LibCryptX (bibliotecas libcryptx que fornecem APIs MD5) O comando md5sum baseia-se no algoritmo MD5 e gera 128- Bit mensagem digere. O comando md5sum permite verificar a integridade dos arquivos baixados em uma conexão de rede. Você também pode usar o comando md5sum para comparar arquivos e verificar a integridade dos arquivos. Servidor HP NonStop (NSS): md5sum fileName No servidor HP NonStop, o comando md5sum está disponível no OSS. Windows: certUtil - hashfile pathToFileToCheck MD5 As versões mais recentes do Windows incluem um utilitário chamado quotcertUtilquot. Para criar um MD5 para C: Downloadsbinary. file, abra um prompt de comando como administrador e digite: certUtil - hashfile C: Downloadsbinary. file MD5 Este utilitário pode ser usado para criar vários SHAs também. HashAlgorithm opções: MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512 Para obter mais informações sobre esse utilitário, consulte o seguinte artigo técnico da Microsoft: technet. microsoften-uslibrarycc732443 (vws.11).aspx CertUtil Informações relacionadas
No comments:
Post a Comment