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 digest MD5 é mais confiável do que um CRC simples (fornecido pelo comando cksum) para detectar a corrupção acidental de arquivos, já que as chances de acidentalmente ter dois arquivos com MD5 idênticos são extremamente pequenas. No entanto, ele não deve ser considerado seguro contra adulteração maliciosa: embora encontrar um arquivo com uma determinada MD5 impressão digital é considerado inviável no momento, é conhecido como modificar certos arquivos, incluindo os certificados digitais, para que eles parecem válidos quando assinado com um MD5 digest. Para hashes mais seguros, considere usar SHA-2. Veja os utilitários sha2. Se um arquivo é especificado como lsquo - rsquo ou se nenhum arquivo é 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 produz por padrão, a soma de verificação MD5, um espaço, um sinalizador que indica o modo de entrada binária ou de texto eo nome do arquivo. O modo binário é indicado com lsquo rsquo, modo de texto com lsquo rsquo (espaço). Modo binário é o padrão em sistemas onde itrsquos significativo, caso contrário modo de texto é o padrão. Se o arquivo contém 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 arquivo arbitrários. Se o arquivo for omitido ou especificado como lsquo - rsquo, a entrada padrão será 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 saída um sinalizador 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 é 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 entrada padrão é um terminal. Lsquo - c rsquo lsquo --check rsquo Leia nomes de arquivos e informações de checksum (não dados) de cada arquivo (ou de stdin se nenhum arquivo foi especificado) e informe se as somas de verificação 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 reverso BSD que é semelhante ao modo padrão, mas não usa um caractere para distinguir os modos binário e de texto. Para cada uma dessas linhas, o md5sum lê o arquivo nomeado e calcula sua soma de verificação MD5. Em seguida, se o sumário de mensagem computada não corresponder um na linha com o nome do ficheiro, o ficheiro é anotado 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 houver 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 só é útil quando se verificam as 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 qualquer incompatibilidade de checksum, imprima um aviso resumindo as falhas ao erro padrão. Esta opção só é útil quando se verificam as 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 são legíveis e são consistentes com as somas de verificação MD5 associadas, saia com êxito. 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, 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. Essa opção é o padrão em sistemas como o 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 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 sem ser zero após todos os avisos terem sido emitidos. Um status de saída de zero indica sucesso e um valor diferente de zero indica failure. September 16, 2007 at 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 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. CHECK2 (CHECK2) 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 (por meio do índice de hash), as colisões geralmente não são tão dispendiosas, fornecendo 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. CONVERT (BINARY (4), CHECKSUM (REVERSE (guid1))) CONVERT (BINARY (4), CHECKSUM (guid1))). 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 diferentes algoritmos hash e comparado a CHECKSUM (). Para MD5 e SHA1 em particular, é muito menos provável de resultar em uma colisão para entradas diferentes (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 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 pode ser um processo difícil e de 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 é a finalidade do uso da funcionalidade CHECKSUM O CHECKSUM destina-se a criar um índice de hash com base em uma expressão ou lista de 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ê precisará 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 um CHECKSUM () porque o valor CHECKSUM gerado é baseado na ordem de coluna para a definição de tabela em tempo de execução que pode alterar ao longo do tempo, por isso eu recomendaria explicitamente definir a lista de coluna 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. Da 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. CHECKSUMAGG e funções 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 para dicas sobre as funções CHECKSUMAGG e BINARYCHECKSUM com mais maneira de implementá-los em 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 vai mudar. 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 determinadas colunas para ver se o hash ainda vai atender às suas regras de negócios e ser único Obrigado, A Equipe MSSQLTips quinta-feira, 03 de abril de 2008 - 10:48:57 AM - glauco. basilio Eu tento unsucefull usar checksum e Binarychecksum para identificar linhas duplicadas no meu banco de dados. Se você tem uma tabela com uma grande quantidade de linhas você verá que ambas as funções geram o mesmo quothashquot para linhas com dados diferentes. Na seção Remarks do SQL BOL 2005, ele diz que este CHECKSUM aplicado sobre 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 vai mudar. 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 as mudanças de dados Se assim for, talvez uma bandeira de tabela seria uma opção mais segura Terça-feira, 11 de março de 2008 - 11:02:52 AM - papachec Eu tenho usado a função checksum com sucesso por algum tempo. Recentemente eu encontrei 2 casos em que uma lista diferente de valores produzidos 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. (39515256220439) produz 1726190947 seleciona checksum (39515356220539) produz 1726190947 seleciona checksum (39515256220539) produz 1726190963 seleciona 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.
Comments
Post a Comment