Kontrollsumma Binära Alternativ


6,5 md5sum. Skriv ut eller kolla MD5 digests md5sum beräknar en 128-bitars kontrollsumma (eller fingeravtryck eller meddelande-digest) för varje specificerad fil. Obs! MD5-smältningen är mer tillförlitlig än en enkel CRC (tillhandahållen av kommandot cksum) för att upptäcka oavsiktlig filkorruption, eftersom chanserna att oavsiktligt ha två filer med identisk MD5 är försvinnande små. Det bör dock inte betraktas som säkert mot skadlig manipulering: även om det är omöjligt att hitta en fil med ett visst MD5-fingeravtryck, är det känt hur man ändrar vissa filer, inklusive digitala certifikat, så att de visas giltiga när de skrivs med en MD5 digerering. För säkrare hash, överväg att använda SHA-2. Se sha2 verktyg. Om en fil anges som lsquo-rsquo eller om inga filer ges md5sum beräknas kontrollsumman för standardinmatningen. md5sum kan också avgöra om en fil och checksum är konsekventa. Synopsis: För varje fil. lsquo md5sum rsquo-utgångar som standard, MD5-kontrollsumman, ett mellanslag, en flagga som indikerar binärt eller textinmatningsläge och filnamnet. Binärt läge indikeras med lsquo rsquo, textläge med lsquo rsquo (utrymme). Binärt läge är standard för system där itrsquos är signifikant, annars är textläget standard. Om filen innehåller en backslash eller en ny linje startas linjen med en backslash, och varje problematiskt tecken i filnamnet undviks med en backslash, vilket gör utdata entydigt även i närvaro av godtyckliga filnamn. Om filen utelämnas eller anges som lsquo-rsquo, läses standardinmatning. Programmet accepterar följande alternativ. Se även Vanliga alternativ. Behandla varje inmatningsfil som binär, genom att läsa den i binärt läge och utmata en lsquo rsquo-flagga. Detta är invers av --text. På system som GNU som inte skiljer mellan binära och textfiler, flaggar det här alternativet bara varje inmatningsläge som binärt: MD5-kontrollsumman är opåverkad. Detta alternativ är standard för system som MS-DOS som skiljer mellan binära och textfiler, förutom att läsa standardinmatning när standardinmatningen är en terminal. lsquo - c rsquo lsquo - check rsquo Läs filnamn och checksuminformation (inte data) från varje fil (eller från stdin om ingen fil anges) och rapportera om kontrollsummorna matchar innehållet i de angivna filerna. Inmatningen till det här läget för md5sum är vanligtvis utsignalen från en tidigare kontrollsumma-generering av lsquo md5sum rsquo. Tre inmatningsformat stöds. Antingen standardutmatningsformatet som beskrivs ovan, - tagutmatningsformat eller BSD-omvänd modalformat som liknar standardläget, men doesnrsquot använder ett tecken för att skilja binära och textlägen. För varje sådan linje läser md5sum den namngivna filen och beräknar sitt MD5 kontrollsumma. Då, om det beräknade meddelandet smälter inte ihop med det på raden med filnamnet, noteras filen som misslyckad testet. Annars skickar filen testet. Som standard skrivs en rad till standardutgång för att ange huruvida den namngivna filen passerade testet. Efter alla kontroller har utförts, om det uppstod några fel, utfärdas en varning till standardfelet. Använd alternativet - status för att hämma den utsignalen. Om någon listad fil inte kan öppnas eller läsas, om någon giltig rad har en MD5 kontrollsumma som inte överensstämmer med den tillhörande filen, eller om ingen giltig linje hittas, kommer md5sum att avslutas med icke-status. Annars slutar det med framgång. lsquo --ignore-missing rsquo Det här alternativet är endast användbart när du kontrollerar kontrollsummor. Vid kontroll av kontrollsummor misslyckas donrsquot eller rapporterar någon status för saknade filer. Detta är användbart vid verifiering av en delmängd av nedladdade filer med en större lista över kontrollsummor. Det här alternativet är endast användbart när du kontrollerar kontrollsummor. När du kontrollerar checksums genererar donrsquot ett rsquoOKrsquo-meddelande per framgångsrikt kontrollerad fil. Filer som misslyckas verifieringen rapporteras i standardformat för en rad per fil. Om det inte förekommer någon kontrollsumma, skriv ut en varning som sammanfattar fel på standardfelet. Det här alternativet är endast användbart när du kontrollerar kontrollsummor. När du kontrollerar kontrollsummar genererar donrsquot den vanliga enlinje per fil diagnostisk och donrsquot-utmatningen varningen som sammanfattar eventuella fel. Underlåtenhet att öppna eller läsa en fil framkallar fortfarande individuell diagnostik till standardfel. Om alla listade filer är läsbara och överensstämmer med de associerade MD5-kontrollsummorna, avslutar du framgångsrikt. Annars slutar du med en statuskod som indikerar att ett fel uppstod. Output BSD-stil checksums, som indikerar den använda checksumalgoritmen. Som en GNU-förlängning undviks filnamn med problematiska tecken som beskrivits ovan, med samma flyktingindikator för lsquo rsquo vid början av raden som används. Alternativet --tag innebär binärt läge och är förbjudet med - textläge som stöd som skulle onödigt komplicera utmatningsformatet, samtidigt som det ger liten nytta. Behandla varje inmatningsfil som text, genom att läsa den i textläge och utmatning av en lsquo rsquo-flagga. Detta är invers av - binära. Det här alternativet är standard på system som GNU som inte skiljer mellan binära och textfiler. På andra system är det standard för att läsa standardinmatning när standardinmatningen är en terminal. Det här läget är aldrig vanligt till om - tag används. Varning om kontrollsummor varnar för felaktigt formaterade MD5 kontrollsummor. Det här alternativet är endast användbart om alla utom några rader i den inmatade inmatningen är giltiga. Vid kontroll av kontrollsummor, om en eller flera ingångslinjer är ogiltiga, avsluta nonzero efter att alla varningar har utfärdats. En utgångsstatus med noll indikerar framgång och ett icke-nullvärde indikerar fel. 16 september 2007 kl. 16:59 183 Filed under SQL Server SQL Server har funktionen CHECKSUM () (och BINARYCHECKSUM ()) för att generera hash-värden. Detta är en enkel hashfunktion som kartlägger inmatningsvärden till ett 32-bitars INTEGER-värde. CHECKSUM () och BINARYCHECKSUM () skiljer sig åt hur de behandlar ingångar av strängdatatypen se ämnet BINARYCHECKSUM () i BOL för mer information. När kan du använda en hashfunktion Hash-funktioner är ett användbart alternativ för att förbättra effektiviteten hos specifika frågor om stora datamängder. På långa textsträngar kan du till exempel bygga ett hash-index för att utföra effektiva sökningar eller för att påskynda aggregatoperationer. Hash-värden som genereras för en hel rad är användbara för att effektivt söka efter skillnader mellan rader i tabeller. Hash-funktioner har många andra användningsområden som ligger utanför ramen för detta inlägg. Ett problem med CHECKSUM () är att sannolikheten för en kollision (genererar samma utgångsvärde för två olika inmatningsvärden) kanske inte är tillräckligt låg för alla applikationer är det inte för svårt att stöta på exempel på två olika ingångar hash till samma utgång värde. Naturligtvis är kollisioner möjliga med någon funktion som har en större domän än dess intervall (per definition), det är bara att sannolikheten med CHECKSUM () är lite för hög för att leva med för många applikationer. Exempelvis visar följande skript ett exempel på två UNIQUEIDENTIFIER-värden som hash till samma värde: DECLARE guid1 UNIQUEIDENTIFIER. guid2 UNIQUEIDENTIFIER SELECT guid1 82173DB7D309-A8F4-47C4-BA90-0CB458B44CB08242. guid2 8216EFE7F2C5-19F9-42B9-9C16-21BED41E882B8217 VÄLJ chksumguid1 CHECKSUM (guid1), chksumguid2 CHECKSUM (guid2) Detta är en särskild svaghet med CHECKSUM () (och BINARYCHECKSUM ()) eftersom den endast har 2 32 möjliga utgångsvärden. Det är trivialt att hitta ytterligare exempel med brute force. Oavsett huruvida du är oroad över kollisioner med CHECKSUM () beror något på dina ansökningskrav. För sökning (via hashindex) är kollisioner i allmänhet inte så kostsamma, eftersom det första utseendet eliminerar den stora andelen rader. För aggregat över en stor dataset eliminerar kollisionerna användbarheten av hashfunktionen och är därför mycket kostsamma. Du kan köra CHECKSUM () två gånger, mot både ingångsvärdet och dess omvända, vilket genererar ett kombinerat 64-bitars utgångsvärde. Detta minskar sannolikheten för en kollision. Med de två tidigare kolliderande UNIQUEIDENTIFIER-värdena från det tidigare exemplet: DECLARE guid1 UNIQUEIDENTIFIER. guid2 UNIQUEIDENTIFIER SELECT guid1 82173DB7D309-A8F4-47C4-BA90-0CB458B44CB08242. guid2 8216EFE7F2C5-19F9-42B9-9C16-21BED41E882B8217 VÄLJ chksumguid1 CONVERT (BIGINT. CONVERT (BINARY (4), CHECKSUM (REVERSE (guid1))) CONVERT (BINARY (4), CHECKSUM (guid1))). charsumguid2 CONVERT (BIGINT. CONVERT (BINARY (4), CHECKSUM (REVERSE (guid2))) CONVERT (BINARY (4), CHECKSUM (guid2))) Funktionen HASHBYTES () introducerades med SQL Server 2005. Den här funktionen ger möjligheten att ange ett urval av olika hashalgoritmer och jämfört med CHECKSUM (). för MD5 och SHA1 i synnerhet, är mycket mindre sannolikt att det resulterar i en kollision för olika ingångar (BOL nämner detta i ämnet CHECKSUM). MD5 matar ut ett 128-bitars värde och SHA1-utgångar ger ett 160-bitars värde, vilket ger 2 128 och 2 160 möjliga utgångsvärden. CHECKSUM Funktioner i SQL Server 2005 Av: Jeremy Kadlec Läs kommentarer (5) Relaterade tips: Fler funktioner - Systemproblem Att bestämma om två rader eller uttryck är lika kan vara en svår och resursintensiv process. Detta kan vara fallet med UPDATE-satser där uppdateringen var villkorad utifrån att alla kolumner är lika eller inte för en specifik rad. För att hantera detta behov i SQL Server-miljön, CHECKSUM. Funktionerna CHECKSUMAGG och BINARYCHECKSUM finns i SQL Server 2005 för att skapa ett unikt uttryck, rad eller tabell för jämförelse eller andra applikationsbehov. I detta tips kommer vi att fokusera på de vanliga frågorna relaterade till CHECKSUM-koden och ge ett exempel för att börja utnyttja kommandona CHECKSUM i din T-SQL-kod. Lösning Vad är syftet med att använda CHECKSUM-funktionaliteten CHECKSUM är avsett att bygga ett hashindex baserat på ett uttryck eller en kolumnlista. När ska jag använda CHECKSUM-funktionen Ett exempel på att använda ett CHECKSUM är att lagra det unika värdet för hela raden i en kolumn för senare jämförelse. Detta skulle vara till hjälp i en situation där alla raderna i ett bord måste jämföras för att kunna utföra en UPDATE. Utan CHECKSUM skulle du behöva göra följande: Jämför UPDATE-koden från det första exemplet till den här med hjälp av CHECKSUM-funktionen. För att denna fråga ska lyckas är det nödvändigt att bygga upp CHECKSUM-värdet före tidpunkten när data införs för att utföra jämförelsen i efterföljande kod. Så om du utför mycket få rader (eller bara om varje kolumn i rad) jämförelser då kan ad hoc-jämförelser vara optimala. Om emellertid ett betydande antal jämförelser görs med ett stort antal kolumner, bör detta alternativ undersökas ytterligare och testas för prestationsförbättringar jämfört med individuella jämförelser som skisseras i den första uppsättningen kod. Vad är några av försiktighetsåtgärderna med att använda någon av CHECKSUM-funktionerna. Behöver du se till att kolumn - eller expressionsordern är densamma mellan de två CHECKSUM-erna som jämförs. Skulle inte rekommendera ett CHECKSUM () eftersom det genererade CHECKSUM-värdet är baserat på kolumnordningen för tabelldefinitionen vid körtid vilket kan förändras över tiden, så jag rekommenderar att du explicit anger kolumnlistan med en statisk ordning i CHECKSUM-koden. Till exempel, använd CHECKSUM (Col1, Col2, Col3) där dessa är alla kolumnerna i en tabell i motsats till CHECKSUM (). Behöver säkerställa att om en datetime-kolumn eller ett värde ingår i CHECKSUM som är lika med de 2 expressionskolumnerna, eftersom om datumtiden är av med en sekund kommer CHECKSUM-värdena att vara olika. Nästa gång du behöver jämföra de unika egenskaperna hos ett uttryck, kolumner eller ett bord, överväga de inbyggda funktionerna som är tillgängliga med CHECKSUM. CHECKSUMAGG och BINARYCHECKSUM funktioner. Om du har UPDATE-kod där många kolumner jämförs för att avgöra om data är unika, överväg att ändra koden från att använda WHERE Col1 Col2 etc. för att bygga CHECKSUM och sedan jämföra CHECKSUM-värdena. Håll dig uppdaterad för tips om funktionerna CHECKSUMAGG och BINARYCHECKSUM, med mer sätt att implementera dem i din kod. Senaste uppdatering: 7192006 Microsoft rekommenderar att HASHBYTES används med MD5-algoritmen för att undvika att problemet med identiska hashkoder skapas. Det finns emellertid en liten chans att kontrollsumman inte kommer att förändras. Av denna anledning rekommenderar vi inte att du använder CHECKSUM för att upptäcka om värdena har ändrats, såvida inte din ansökan kan tolerera ibland att en ändring saknas. Överväg att användaHashBytes instead. När en MD5-hashalgoritm har angivits är sannolikheten för HashBytes som returnerar samma resultat för två olika ingångar mycket lägre än för CHECKSUM. Fredag ​​den 04 april 2008 - 07:10:12 - admin Samtyckt att hasherna kan vara desamma på två olika rader. Kan du inkludera eller utesluta särskilda kolumner för att se om hash fortfarande uppfyller dina affärsregler och vara unika Tack, MSSQLTips-teamet torsdag 03 april 2008 - 10:48:57 - glauco. basilio Jag försöker otillräckligt använda checksum och binarychecksum för att identifiera dubbla rader i min databas. Om du har ett bord med en stor mängd rader ser du att båda funktionerna genererar samma quothashquot för rader med olika data. Tisdag den 11 mars 2008 - 6:57:26 PM - aprato I avsnittet Anmärkningar i SQL 2005 BOL står det att detta CHECKSUM som tillämpas över två listor med uttryck returnerar samma värde om motsvarande element i de två listorna har samma typ och är lika när man jämför med användaren equals (). För denna definition anses nullvärden av en angiven typ jämföras. Om ett av värdena i uttryckslistan ändras ändras också kontrollsumman i listan generellt. Det finns emellertid en liten chans att kontrollsumman inte kommer att förändras. Baserat på de sista 2 meningarna, är jag inte säker på att den är tillförlitlig. Jag brukar inte använda det (faktiskt har jag aldrig använt det). Används du här för att kontrollera dataändringar Om så är fallet kanske en tabellflagg skulle vara ett säkrare alternativ tisdag 11 mars 2008 - 11:02:52 - papachec Jag har använt kontrollsumfunktionen framgångsrikt under en längre tid. Nyligen stötte jag på 2 fall där en annan lista över värden gav identiska kontrollsummor. Jag skulle vilja förstå den beräkning som görs med kontrollsumman 39 under huven39 för att veta hur det är möjligt och hur säkert det är att fortsätta att använda 39checksum39. EXEMPEL: välj checksum (39515256220439) producerar 1726190947 välj checksum (39515356220539) producerar 1726190947 välj checksum (39515256220539) ger 1726190963 välj checksum (39515356220439) producerar 1726190963 Jag förväntade mig att jag skulle få 4 olika resultat eftersom var och en av de 4 exemplen är en annan lista över värden. Men jag får bara 2 olika resultat. Dina kommentarer och förslag välkomnas.

Comments

Popular Posts