AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Internet Get/Set-Cookie + RC4 = Trouble :/
Thema durchsuchen
Ansicht
Themen-Optionen

Internet Get/Set-Cookie + RC4 = Trouble :/

Ein Thema von Amargosa · begonnen am 31. Mai 2006 · letzter Beitrag vom 7. Jun 2006
Antwort Antwort
Benutzerbild von Amargosa
Amargosa

Registriert seit: 17. Mai 2006
Ort: Offenbach
21 Beiträge
 
#1

Internet Get/Set-Cookie + RC4 = Trouble :/

  Alt 31. Mai 2006, 15:42
Hallo alle

Ich habe mir ein kleines Tool geschrieben das mit Cookies setzt und liest.
Das funktionioert soweit auch richtig.

Nachdem das funktionierte habe ich Hagens RC4 genonnem und drangehängt Danke!

Ich speichere mit den WinInet.InternetSetCookie einen Wert. Dieser Wert wird vorher durch das RC4 gejagt. Dann wird er gespeichert.

Und genau jetzt beginnt das Problem: Beim Speichern dieses verschlüsselten Wertes ändert sich dieser. Ich weiss nicht wodurch. Keine Ahnung ob es am PAnsiChar oder AnsiString liegt oder ob WinInet irgendwas damit macht. Zumindest ist ja nun klar das wenn ich den Cookie Abfrage (InternetGetCookie) der "falsche" Wert gespeichert wurde und die Decodierung durch RC4 nur Mist zur Folge haben kann.
Anbei mein Code. Wäre toll wenn mir jemand helfen könnte oder einen Vorschlag hat.

Danke und Gruß,
Ben

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, WinInet, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    BitBtn1: TBitBtn;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  sSaved, sGet: String;

const
  cKeyCode: String = '148576298388';

implementation

{$R *.dfm}

uses RC4;

//Funktion zum stzen des Cookies
//Funktioniert einwandfrei
//Cookie wird auf Festplatte geschrieben und bleibt auch
procedure SetCookie(sValue: String);
var
  bReturn: Boolean;
  pCookiename, pURL, pValue: PAnsiChar;
  sTemp: String;

begin
  pCookiename := PAnsiChar('TestData');
  pURL := PAnsiChar('http://localhost');

  sValue := RC4Code(sValue, cKeyCode);
  sSaved := sValue;

  { //Vergleich alls String und Ansi, kein Unterschied
  sTemp := 'Normal value: ' + sValue;
  sTemp := sTemp + ' Pansi value: ' + PAnsiChar(sValue);
  ShowMessage(sTemp);
  }


  pValue := PAnsiChar(sValue + '; expires = Sat, 01-Jan-2007 00:00:00 GMT');
  bReturn := InternetSetCookie(pURL, pCookiename, pValue);
  if(not bReturn) then ShowMessage('FALSE SetCookie');
end;

function GetCookie: String;
var
  pURL, pName: PAnsiChar;
  pData: AnsiString;
  cSize, cError: Cardinal;
  bResult: Boolean;
  sString2, sString: String;
  iPos, iX: Integer;

begin
  pURL := PAnsiChar('http://localhost');
  pName := PAnsiChar('TestData');
  cSize := 255;
  pData := '';
  bResult := FALSE;

  //ShowMessage('1 try');
  try
    InternetGetCookie(pURL, pName, nil, cSize);
  except
    on E: Exception do begin
      cError := Windows.GetLastError();
      if(cError = ERROR_NO_MORE_ITEMS) then begin
        ShowMessage('ERROR_NO_MORE_ITEMS');
      end;
      if(cError = ERROR_INSUFFICIENT_BUFFER) then begin
        ShowMessage('ERROR_INSUFFICIENT_BUFFER');
      end;
      ShowMessage(E.Message+' '+IntToStr(E.HelpContext));
      exit;
    end;
  end;

  pURL := PAnsiChar('http://localhost');
  pName := PAnsiChar('TestData');
  SetLength(pData, cSize);
  //ShowMessage('2 try');
  try
    bResult := InternetGetCookie(pUrl, pName, PAnsiChar(pData), cSize);
  except
    on E: Exception do begin
      cError := Windows.GetLastError();
      if(cError = ERROR_NO_MORE_ITEMS) then begin
        ShowMessage('ERROR_NO_MORE_ITEMS');
      end;
      if(cError = ERROR_INSUFFICIENT_BUFFER) then begin
        ShowMessage('ERROR_INSUFFICIENT_BUFFER');
      end;
      ShowMessage(E.Message+' '+IntToStr(E.HelpContext));
      exit;
    end;
  end;
  if(bResult = FALSE) then begin
    ShowMessage('GET COOKIE FALSE');
    exit;
  end;
  if(bResult = TRUE) then begin
    ShowMessage('PAnsi Data: ' + pData); //Daten werden verändert gelesen
    SetLength(sString, Length(pData));
    sString := pData;
    iPos := 0;
    for iX := 0 to Length(sString) do begin
      if(sString[iX] = '=') then begin
        iPos := iX;
        break;
      end;
    end;
    if(iPos <> 0) then begin
      SetLength(sString2, (Length(sString) - iPos));
      //Alternativ benutze ich hier auch (Length(sString))-1
      sString2 := Copy(sString, (iPos+1), (Length(sString)));
      ShowMessage('sString2: ' + sString2);
      sString2 := RC4Code(sString2, cKeyCode);
      sGet := sString;
    end;
    ShowMessage('GET COOKIE TRUE - Cookie: ' + sString2);
    Result := pData;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  SetCookie('doof22_dumm11');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 sString: String;

begin
  sString := '';
  sString := GetCookie;
  ShowMessage('Compare - Saved: ' + sSaved + ' to: ' + sGet);
end;

end.
P.S.: Hagen's RC4 ist unverändert. Daran wurde nix gemacht bis auf den RC4Seed zu ändern.
  Mit Zitat antworten Zitat
Benutzerbild von Amargosa
Amargosa

Registriert seit: 17. Mai 2006
Ort: Offenbach
21 Beiträge
 
#2

[Gelöst]

  Alt 7. Jun 2006, 15:36
Ich benutze nun eine Rajindael-Verschlüsselung die in einem Base64-Container steckt. Dadurch werden die Werte beim speicher/laden nicht zerfetzt.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz