![]() |
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:
ein erfolgreiches Beispiel she etwa so aus:
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]; }
Code:
Input:
9WmmPlsmBWBbtnIrw4VGL6nhilWOh6IuP3DDkswARnAfyvKvw8i9oqtmlcI8Y6VwETnJ sQTnAF/5B5FzJ4kLmdm3mPXfKaMepgHIs1httUSpPewTKVtIsuAxDL+8amtV/HGhfgxMP kQgyaUUbI6g7/M6mujoRN3VFuc1oFk4U2R2RJWWuwvsO/ccMAGe+C1uSotPJPjzdGd1lk Euqp/QuQ9SIHBseWMxf1Iwnh2Tcd+qCfk8VRzXcMxl13GFSaG4+N/f+qNVmJGMA== Umwandlung: ZɁX휊Qxbc٥p\Nrpc�_s$L7M+,+hǩr,mQ*O{7uEhN%eR�䨴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 |
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:
bei fragen, fragen.
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz