Results 1 to 10 of 16

Thread: String handling issue with Free Pascal

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Nevermind, I'm done with it. It was the stupidest error ever.

    In the for cycle when I'm writing the results out
    Instead of Results[Num] I should use Results[j]

    Now the code is fully functional(except for that it takes forever to decode anything beyond 4 character length) Thanks for the input guys.

    Code:
    Program Md5BruteForce;
    
    Uses Md5;
    
    Var
    
    hash,test,tri:string;
    
    Num,Max,j:integer;
    
    Results:array[1..100] of string;
    
    
    Function NextChar(c:char):char; //This is for changing the characters in the string
    
    Begin
    
     if c='z' then NextChar:='0'
     else
     if c='9' then NextChar:='a'
     else
     NextChar:=Succ(c); //Succ=Next Character in ABC order, next number if the character is a number
    
    End;
    
    Procedure ChangeChar(MaxLength,spot:integer; Var Str:string); //The main procedure
    
    Var
    
     counter:integer;
     i:integer;
    Begin
    
     counter:=0;
    
    
     if Str[spot]='9' then
    
     begin
    
      if length(Str)<=MaxLength then
    
      begin
    
       for i:=1 to length(Str) do
       begin
    
        if Str[i]='9' then counter:=counter+1; //Count the 9s in the string
    
       end;
    
       if counter=length(Str) then
       begin
    
        for i:=1 to length(Str) do Str[i]:='a';
        Str:=Str+'a'; //If every character is a 9, then change all of them back to 'a', and add a plus 'a' to the string
    
       end
    
       else
       begin
        Str[spot]:='a';
        ChangeChar(MaxLength, spot-1,Str); //The procedure calls itself, until a non-9 character is found
       end;
      end;
     end
     else
    
     Str[spot]:=NextChar(Str[spot]); //If a non-9 character is found then it is simply switched to the next character
    
    
    End;
    
    
    
    Begin
    
    for j:=1 to 100 do
    
    begin
     Results[j]:=''; //Clearing the array, just to make sure...
    end;
    
    Writeln('Please Give me the hash');
    Readln(hash);
    
    Writeln('Please give me the estimated maximum length of the original text(characters)');
    Readln(Max);
    
    test:='a';
    
    Num:=1;
    
    Repeat
    
    tri:=MD5Print(Md5String(test));
    
    if tri=hash then
    
    begin
    Results[Num]:=test;
    Num:=Num+1; //Storing the matches in an array
    
    end;
    
    Write('Now trying: ',test);
    Write('       ');
    Writeln('Hash: ',tri); //A bit redundant, but it helped me debug the recursion, and it looks cool so I kept it.
    
    ChangeChar(Max,length(test),test); //Go to the next variation
    
    Until length(test)>Max; //Loop ends if the maximum character length is exceeded
    
    if Num>1 then //Checking if there is more than 0 results
    
    begin
    
     for j:=1 to Num-1 do
      begin
    
      Writeln('Result #',j,': ',Results[j]); //Writing out all the results
    
      end;
    end
    else
    Writeln('Sorry, your hash could not be recovered'); //If the search fails...
    
    Readln;
    
    End.

  2. #2
    Now why not implement multithreading to make everything run faster

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •