Avatar billede dr.truti Nybegynder
30. juni 2002 - 21:13 Der er 2 kommentarer og
2 løsninger

hashing ???

Er der nogle der kan give mig et eksempel på hvordan jeg laver den eller anden form som hashing under C/C++ eller bare en simpel MD5 cryptering :-)

Truti
Avatar billede jakoba Nybegynder
30. juni 2002 - 23:42 #1
hashing har helt bestemt intet med nogen form for kryptering at gøre.

det progblem man løser med hashing er at nøgleværdierne i en spredt ('sparse') array ofte klumper
fx styresystemnavne

windows95
windows98
windowsME
windowsXP
windowsNT
Wondows2000
Unix
Linux
OS2
MacOS

der er mange andre, men i forhold til antallet mulige bogstavkombinationer på 11 eller færre bogstaver er det alligevel nul og niks.

vi vil lave et array med de navne. og så er der et problem med tid, for at skelne en windows fra en anden skal vi sammenligne syb bogstaver i rap før der er nogen forskel at se, det koster. Lige i eksemplet her er det nok overkommeligt, men forestil dig det er hovedtelefonbogen for kina og hver nøgle er et personnavn, en vejadresser, et bynavn, et distrikt, osv. det er en dyr database at slå op i.

Det hashing gør er at komprimere nøglerne så de fylder en brøkdel af hvad de bjorde før og samtidig (hvis man gør det fornuftigt) bliver meget bedre at slå op i databasen med.

en ofte anvendt metode er at folde nøglerne en gang eller flere.

windows95-------      tilføj blanktegn så der er et pænt tal (her 16)

                      konverter bogstaver til hex (fx bogstavernes ascii værdier)
77 69 6e 64 6f 77 73 39 35 20 20 20 20 20 20 20

02 02 02 02 02 02 02 53            fold sammen
77 69 6e 64 6f 77 71 39

79 7b 70 66 71 79 73 8c            læg sammen (carry smides bare væk)

c8 37 97 17                        fold sammen igen
79 7b 70 66

41 b2 07 7d                        læg sammen igen

d7 70                              og sidste gang
41 b2

18 22                    og ny har vi et 16bit tal der er pærenemt at sammeligne med

Benærk at den metode vi bruger til at komprimere nølerne skal være meget præcist defineret, så vi kan gøre det igen og igen. hvegang nogen komme med en streng "windows95" skal den komprimerede hash-nøgle blive præcis den samme.

                  vi laver hash-nøgler med samme metode for de andre nøgler
og nu kan vi lede i databasen med de nøgler som er lynhutige at sammenlignemed. i databasen gemmer vi både hash-næglen og den lange nøgle, det er vi nødt til for det er komplet umuligt st starte med 1822 og derudaf bergene at den lange nøgle var 'windows95' der er bunker af lange nøgler det kunne have været.

måske endda 2 af dem vi har brug for at kunne finde i vores database.
men 'so what!' så hiver vi bare dem begge to ud af databasen og sammenligner på den store nøgle, hvilken af dem vi vil have.

Det lyder grumme omstændigt, men man kan faktisk spare en masse cputid med sådan nogen hash nøgler.

men hvis det er en måde at kryptere data på du ønsker skal du ikke brugge detteher. ved kryptering er det jo vigtigt at man kan konvertere tilbage igen, og det kan man ikke med hashing.

mvh JakobA
Avatar billede dr.truti Nybegynder
01. juli 2002 - 11:24 #2
Det var meget interessant at læse om men det er desværre ikke helt det jeg skal bruge.... er nok mere et eksempel for kode der kan MD5 kryptere en streng.....

Truti
Avatar billede jakoba Nybegynder
01. juli 2002 - 12:34 #3
en freware modul til MD5 kryptering:
http://www.digital-crew.com/index.cfm?sid=3&ssid=16  (næstnederst)
Avatar billede dr.truti Nybegynder
05. juli 2002 - 14:19 #4
jakoba: Tak for svarene men jeg har desværre ikke kunne få kilden til at køre.. Dog mener jeg absolut at du har gjordt til fortjænt til noglepoints så du får halvdelen....

Truti
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester