AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke SSL aus PHP in Delphi exportieren
Thema durchsuchen
Ansicht
Themen-Optionen

SSL aus PHP in Delphi exportieren

Ein Thema von v4t0r · begonnen am 17. Mär 2008 · letzter Beitrag vom 31. Mär 2008
Antwort Antwort
v4t0r

Registriert seit: 17. Mär 2008
2 Beiträge
 
#1

SSL aus PHP in Delphi exportieren

  Alt 17. Mär 2008, 16:28
Hallo zusammen,

ich habe die Aufgabe bekommen, für einen Shop weitergeleitete Anfragen via der Delphi IntraWeb Komponente zu bearbeiten. Hierbei bekomme ich von dem auf PHP basierenden Shop den mit SSL verschlüsselten Satz, der dann mit dem Public Key auf meiner Seite entschlüsselt werden soll. Mit dem Beispiel in PHP funktioniert das auch prima, nur ist es mir leider noch nicht gelungen das ganze auch in Delphi zu realisieren.. Ich MUSS es auch in Delphi hinbekommen , so lautet leider die Aufgabe.
Hat vielleicht jemand eine Idee, oder weiss ob das generell möglich ist?

Probiert habe ich es bisher mit den Indy-Componenten IdSSLIOHandlerSocket, IdServerIOHandlerSSL, IdDecoderMIME...
Habe auch OpenSSL usw installiert.

Hier die function in PHP


Code:
function decryptX509($cryptInput,$productName)
{
   $debug="1";
   $exportValues=array();
   if ($debug=="1")
   {
      echo "Input:
$cryptInput

";
   }
   $cryptDecoded=base64_decode($cryptInput);
   if ($debug=="1")
   {
      echo "Umwandlung:
$cryptDecoded

";
      echo "<hr>";
   }

   $fp=fopen ("certificate.cer","r");
   $pub_key=fread($fp,8192);
   fclose($fp);
   openssl_public_decrypt($cryptDecoded,$newSource,$pub_key);
   $newSource=utf8_decode($newSource);
   $transferedValues=array();
   $transferedValues=explode("&",$newSource);
   .
   .
   foreach ($transferedValues as $key => $value)
   {
      $singleValue=explode("=",$value);
      $singleValue[1]=utf8_decode(urldecode($singleValue[1]));
      
      if ($debug=="1")
      {
          echo "Variablenname: ".$singleValue[0]." - Wert: ".$singleValue[1]."
";
      }
      $$singleValue[0]=$singleValue[1];
      $exportValues[$singleValue[0]]=$singleValue[1];      
      
   }
ein erfolgreiches Beispiel sähe etwa so aus:
Code:
Input:
9WmmPlsmBWBbtnIrw4VGL6nhilWOh6IuP3DDkswARnAfyvKvw8i9oqtmlcI8Y6VwETnJ
sQTnAF/5B5FzJ4kLmdm3mPXfKaMepgHIs1httUSpPewTKVtIsuAxDL+8amtV/HGhfgxMP kQgyaUUbI6g7/M6mujoRN3VFuc1oFk4U2R2RJWWuwvsO/ccMAGe+C1uSotPJPjzdGd1lk Euqp/QuQ9SIHBseWMxf1Iwnh2Tcd+qCfk8VRzXcMxl13GFSaG4+N/f+qNVmJGMA==

Umwandlung:
Z½ÉX휊ðáQ‹êxb•c¡ªÙ¥pé\Nrpcïä±ç&#65533;_ù‘s$LÈé7Mìõß+,Ëý+hÇ©€r,ÖmQ*O{ïš7uE¹ÍhNÙ‘%e®ÂûýÄéRøÍýÃ&#65533;ï‚Ö䨴òO7FwYdê©ý õ"Ç–3õ# áÙ7ú »HŒŠMóbÔlPܪÏuVŸ” ü…Zô²$š¶l9~OG5Ü3uÜaRhn>¸¹ý;ãêVbF0

Variablenname: anrede - Wert: keine
Variablenname: name - Wert: Muster
Variablenname: vorname - Wert: Max
Variablenname: email - Wert: [email]max@must.er[/email]
Variablenname: rolle - Wert: 9
Variablenname: benId - Wert: 1111111
Variablenname: blz - Wert: 1111111
Variablenname: time - Wert: 1195128135
Variablenname: produkt - Wert: leiterr
  Mit Zitat antworten Zitat
v4t0r

Registriert seit: 17. Mär 2008
2 Beiträge
 
#2

Re: SSL aus PHP in Delphi exportieren

  Alt 31. Mär 2008, 15:57
Falls jemand ein ähnliches Problem haben sollte, ich habe es mitlerweile Lösen können.
Das ganze funzt super mit der OpenSSL.dll und der libaey32.pas

Delphi-Quellcode:
unit decode;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdIOHandler, IdIOHandlerSocket,
  IdSSLOpenSSL, StdCtrls, IdCoder, IdCoder3to4, IdCoderMIME, opensslutils,
  libeay32;

type
  TForm1 = class(TForm)
    ssl: TIdSSLIOHandlerSocket;
    Button1: TButton;
.
.
.

  private
    { Private-Deklarationen }
  public
    crypt, decrypt, decryptRAW : string;

    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  code: tstrings;
implementation uses dateutils, XSBuiltins;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var cer : TX509Certificate;
    pk : pEVP_PKEY;
    pr : pRSA;
    l, padding : integer;
    p : array[1..50000] of byte;
    t,u : string;
    dt : tdatetime;
    dt2 : txscustomdatetime;
    i,j : integer;
begin
 pk := nil;
 pr := nil;
 decrypt := 'nix';
 padding := 1; // PADDING constants RSA_PKCS1_PADDING = 1;
 cer := TX509Certificate.create;
 l := 0;
 cer.loadfromfile('cert.cer',DER);
 pk := X509_get_pubkey(cer.cert);
 setlength(decrypt,256);
 move(pk.pkey.rsa^,decrypt[1],256);
 l := RSA_public_decrypt(length(crypt), @crypt[1], @p[1], pk.pkey.rsa,padding);
 setlength(decrypt,l);
 move(p[1],decrypt[1],l);
 decryptRAW := decrypt;
 decrypt := reformat(decrypt);
 memo2.text := decrypt;
end;
end.
bei fragen, fragen.
  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:57 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