Det jeg skal bruge er en rutine der Generer et password ud fra 2 ting den ene er serie nummeret på noget hardware og det andet er et eller andet tal/string
glem det med den faste format, jeg håber at det hjælper jer lidt
Det kan du jo gøre på allemulige forskellige måder... f.eks. addere tværsnitet af streng1's enkelte tegne med tværsnittet af streng2 enkelete tegn eller du kan snuppe et gennemsnit af de to strenge... eller... eller...
Eks: Function tværsnit(s: string):byte; var a:integer; sum: longint; begin for a:=0 to length(s) do sum:=sum+ord(s[a]); tvæsnit:=sum div length(s); end;
function check(ser: integer; s1,s2: string):boolean; Begin if ser=(tværsnit(s1)+tværsnit(s2)) then check:=true else check:=false;
som stoons siger er der masser af muligheder. Du skal bare beslutte dig for et eller andet. F.eks. datoen i amerikansk format (yyyymmdd) for din onkels fødselsdag, eller et eller andet du ttor kun du kender eller kan gætte.
Derefter tager du dette tal og sætter ind i en tekststreng sammen med navnet på din søsters kærestes mor:
f.eks: txt1 := '20000403marianne';
og hvis du har brug for at strengen skal være længere finder du på noget mere. txt1 skal have samme længde, eller større end den samlede længde af de data du har til rådighed.
Lad os sige du har et serienr (fra hardwaren) der hedder "XYZ11223344" og din tal eller tekststreng indeholder "abcdefg12345". Disse 2 sætter du så sammen i en ny streng der hedder txt2. Txt1 skal så indeholde minimum lige så mange tegn som txt2.
Derefter lægger du de 2 tekststrenge sammen tegn for tegn (ascii værdien af hvert tegn) og for de hvor den samlede værdi overstiger 256 trækker du 256, således at summen af de 2 tegn altid er mindre end 256:
eks.
funktion password (txt1, txt2 : string) : string; var i : integer; x : integer; s : string; begin s := ''; for i := 1 to length(txt2) do begin x := ord(txt2[i])+ord(txt1[i]); if x > 256 then x := x -256; s := s + chr(x); end; result := s; end;
og hvis du så sætter hhv. t1 og t2 op således og derefter kalder rutinen får du et password:
Hvis det skal være password som skal indtastes så sørg for at det kun består af "synlige tegn". Det forslag jeg foreslog genererede en hex-værdi (bestående af tegnene "0".."9","A".."F") hvorved dette var "tast-bart". Ligeledes kan du på samme måde sammenstykke din tekst og dit tal til en streng hvorefter du eksempelvis beregner en CRC værdi for stengen.
Du kan også vælge at beregne "tværsnitte" som stoons forslår, men dette vil være nemt at knække. Ligeledes vil flere værdier resultere samme "password" ("ABCDE" = "EDCBD" = "CCCCC" = "ACCCE" osv...). Hvis man således kender algoritmen så kan man statistisk beregne det serienummer som programmet vil returnere for en given længde streng
det er allesammen nogle gode forslag men Sjensen kommer tættes på det jeg gerne vil ha´ så Sjensen hvis du kan modificere din kode så den er skrivebar så er pointne dine
pellelil jeg kan ikke få din kode til at virke den retunere FFFFFFFF altid
Vedr. Skrivbar: Som pellelil siger det er det vanskeligt at skrive alle tegn, så funktionend er udregner password skal bare sikre at de tegn der bruges altid er større end dec 31 (mellemrum er nr. 32) og mindre end 128 (de fleste over 128 skal indtastes via ALT + et tal. Det gælder dog ikke de specielle danske æøå som hhv små og store tegn, men da man ikke ser det alligevel beyder det ikke noget. Så ret funktionen til således:
funktion password (txt1, txt2 : string) : string; var i : integer; x : integer; s : string; begin s := '; for i := 1 to length(txt2) do begin x := ord(txt2[i])+ord(txt1[i]); if x < 32 then x := x + 32; while (x > 128) do x := x - 32; s := s + chr(x); end; result := s; end;
Synes godt om
Ny brugerNybegynder
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.