Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   SSL aus PHP in Delphi exportieren (https://www.delphipraxis.net/110397-ssl-aus-php-delphi-exportieren.html)

v4t0r 17. Mr 2008 16:28


SSL aus PHP in Delphi exportieren
 
Hallo zusammen,

ich habe die Aufgabe bekommen, fr einen Shop weitergeleitete Anfragen via der Delphi IntraWeb Komponente zu bearbeiten. Hierbei bekomme ich von dem auf PHP basierenden Shop den mit SSL verschlsselten Satz, der dann mit dem Public Key auf meiner Seite entschlsselt 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 :D, so lautet leider die Aufgabe.
Hat vielleicht jemand eine Idee, oder weiss ob das generell mglich 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 she etwa so aus:
Code:
Input:
9WmmPlsmBWBbtnIrw4VGL6nhilWOh6IuP3DDkswARnAfyvKvw8i9oqtmlcI8Y6VwETnJ
sQTnAF/5B5FzJ4kLmdm3mPXfKaMepgHIs1httUSpPewTKVtIsuAxDL+8amtV/HGhfgxMP kQgyaUUbI6g7/M6mujoRN3VFuc1oFk4U2R2RJWWuwvsO/ccMAGe+C1uSotPJPjzdGd1lk Euqp/QuQ9SIHBseWMxf1Iwnh2Tcd+qCfk8VRzXcMxl13GFSaG4+N/f+qNVmJGMA==

Umwandlung:
ZɁX휊Qxbc٥p\Nrpc&#65533;_s$L7M+,+hǩr,mQ*O{7uEhN%eR&#65533;䨴O7FwYd "ǖ3# 7 HMblPܪuV Zô$l9~OG53uaRhn>;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

v4t0r 31. Mr 2008 15:57

Re: SSL aus PHP in Delphi exportieren
 
Falls jemand ein hnliches Problem haben sollte, ich habe es mitlerweile Lsen knnen.
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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