Mit PHP verschlüsseln
Hallo,
ich möchte Daten mit PHP in eine Datei schreiben und diese Daten verschlüsseln. Das ganze soll natürlich so verschlüsselt werden, das ich mit dem richtigen Key das ganz einfach wieder lesbar machen kann. Entschlüsseln möcht ich mit irgend einem Programm in Delphi, oder Java oder auch PHP. Habt ihr ne Ahnung wie ich das am besten anstelle? Was für eine Verschüsselung wäre da empfehlenswert? Es geht bei der Sache nicht um Passwörter, sondern um Daten die ich danach wieder lesen möchte. |
Re: Mit PHP verschlüssen
Geht mit mcrypt
http://www.php.net/mcrypt |
Re: Mit PHP verschlüssen
@Angel4585: Spendierst Du Deinem Titel bitte noch ein zusätzliches 'L' ;-)
|
Re: Mit PHP verschlüsseln
jo aber das L hat nich so gut da rein gepasst, hab mal ein l draus gemacht ;)
|
Re: Mit PHP verschlüssen
Zitat:
Ich brauch zB ne Komponente oder sowas um Blowfish zu entschlüsseln. Aber alle die ich bisher gesehen habe können keinen in PHP verschlüsselten "Blowfish-String" entschlüsseln. |
Re: Mit PHP verschlüsseln
Blowfish ist grundsätzlich Blowfish egal mit welcher Sprache man verschlüsselt, wenn Modus, Schlüssel usw. identisch sind.
|
Re: Mit PHP verschlüsseln
Zitat:
|
Re: Mit PHP verschlüsseln
Cool danke,
ich hab jetzt Hagens DEC runtergeladen, aber häng grad en bissi :(
Delphi-Quellcode:
Vllt stell ich mich au nur blöd an (is noch früh :duck: )
var
d : TCipher_Blowfish; res : string; dec : string; begin d := TCipher_Blowfish.Create; d.Init('3dkuyhq6'); dec := 'SIl0uQAFoX++OKTuCUahIuHgAZWccLC9'; d.Decode(dec ,res, Length(dec)); ShowMessage(res); end; Wenn ich das recht verstehe liefert mir die Decode Prozedur einen dekodierten String zurück. Allerdings kommt bei der Ausgabe des Strings dann folgender Fehler: --------------------------- Testprog --------------------------- Zugriffsverletzung bei Adresse 004040F2 in Modul 'TestProg.exe'. Lesen von Adresse F8F3AB45. --------------------------- OK --------------------------- Was mache ich denn alles falsch hier? Edit: Zur Verschlüsselung in php werd ich das hier verwenden: PHP-Einfach.de |
Re: Mit PHP verschlüsseln
Zitat:
Delphi-Quellcode:
Für res wird noch kein Speicher belegt sein und deshalb wird's krachen. Wenn Du Blowfish-CBC benutzt, mußt Du auch noch einen IV=IVector angegen und den CBC-Modus setzen.
procedure Decode(const Source; var Dest; DataSize: Integer);
Delphi-Quellcode:
Also mit Deinen Bezeichnern ungefähr so (der große Meister wird's Dir sicher genau sagen können):
procedure TDECCipher.Init(const Key; Size: Integer; const IVector; IVectorSize: Integer; IFiller: Byte);
Delphi-Quellcode:
Wie Du an den IV kommst, ist implementationsabhängig (=das must Du rauskriegen).
d.Mode := cmCBCx;
d.Init('3dkuyhq6',8,IV,8); Gruß Gammatester |
Re: Mit PHP verschlüsseln
Um ehrlich zu sein versteh ich nur Bahnhof :(
Aber ich werd mich mal reinarbeiten vllt versteh ich doch irgendwas davon :glaskugel: |
Re: Mit PHP verschlüsseln
Hi,
schau mal beim Michael beim FileCrypter. Dort ist eine Datei Encrypt.pas. In der ist ein Beispiel, wie man das DEC richtig verwendet. |
Re: Mit PHP verschlüsseln
Also bei mir funzt das nicht :wall:
Wende ich das richtig an? Delphi:
Delphi-Quellcode:
PHP:
var d : TCipher_Blowfish ;
begin d := TCipher_Blowfish.create; d.Mode := cmCBCx; d.Init('Passwort','12345678'); ShowMessage(Format('%10s: %s'+slinebreak+'%10s: %s',[ 'Delphi', d.EncodeBinary('Teststring',TFormat_HEX), 'PHP', IdHTTP1.Get('http://localhost/crypt/mawe.php')])); d.Free;
Code:
Die Ausgabe:
<?php
$key = "Passwort"; $input = "Teststring"; $encrypted = mcrypt_cbc(MCRYPT_BLOWFISH,$key ,$input,MCRYPT_ENCRYPT,'12345678'); echo bin2hex($encrypted); ?> --------------------------- Testprog --------------------------- Delphi: E51A3C77A4D01A2BA9D3 PHP: e51a3c77a4d01a2b4540b5e1767b982b --------------------------- OK --------------------------- Eins iss megakurz das andere länger.. kp.. :( |
Re: Mit PHP verschlüsseln
Zitat:
Auf PHP-Seite mußt Du jetzt "nur" noch zwei Sachen rauskriegen: 1. Welcher IV benutzt wird (random etc), und wie Du auf Delphiseite daran kommst. 2. Welches Padding benutzt wird, um auf volle Blocklänge aufzufüllen. Auf Delphiseite dann manuell einbauen. Willkommen im Cryptodschungel! Gruß Gammatester |
Re: Mit PHP verschlüsseln
Zitat:
Zu 1: Ich meine selbstverständlich den normalen Produktions-IV, bei Deinem Beispiel ist er ja '12345678'. Zu 2: Wenn man Deine Angaben durch Crypto++ jagt, kann ich den Ciphertext reproduzieren, wenn PKCS#7-Padding benutzt wird. Gruß Gammatester |
Re: Mit PHP verschlüsseln
Ich komm da nicht weiter :wall:
Habt ihr mir ein kleines funktionierendes Codebeispiel? Also PHP-Skript + Delphicode? (Ja ich weis normalerweise wird sowas hier nicht gemacht aber ich komm schlichtweg nicht weiter :( ) BTW: Das einzige was bisher funktioniert hat war ne einfach XOR Verschlüsselnung(kann man das Verschlüsselung nennen? :gruebel: ) und Base64. Beides aber ja nicht gerade sicher :pale: |
Re: Mit PHP verschlüsseln
:firejump::firejump::firejump::firejump: ES GEEEEHT!!! :firejump::firejump::firejump::firejump:
Delphi-Quellcode:
Und das PHP Pendant(Schreibt man das so? :gruebel: ) zur Encrypt Methode dazu:
const
KeySize = 32; // 32 bytes = 256 bits BlockSize = 8; // 16 bytes = 128 bits // Pad a string with zeros so that it is a multiple of size function PadWithZeros(const str : string; size : integer) : string; var origsize, i : integer; begin Result := str; origsize := Length(Result); if ((origsize mod size) <> 0) or (origsize = 0) then begin SetLength(Result,((origsize div size)+1)*size); for i := origsize+1 to Length(Result) do Result[i] := #0; end; end; procedure Encrypt; var Cipher : TDCP_blowfish; Data, Key, IV : string; tkey, tdata, tiv : string; begin tkey := '12345678901234567890123456789012'; tdata := 'Teststring'; tiv := '12345678'; // Pad Key, IV and Data with zeros as appropriate Key := PadWithZeros(tkey,KeySize); IV := PadWithZeros(tiv,BlockSize); Data := PadWithZeros(tdata,BlockSize); // Create the cipher and initialise according to the key length Cipher := TDCP_blowfish.Create(Self); if Length(tkey) <= 16 then Cipher.Init(Key[1],128,@IV[1]) else if Length(tkey) <= 24 then Cipher.Init(Key[1],192,@IV[1]) else Cipher.Init(Key[1],256,@IV[1]); // Encrypt the data Cipher.EncryptCBC(Data[1],Data[1],Length(Data)); // Free the cipher and clear sensitive information Cipher.Free; FillChar(Key[1],Length(Key),0); // Display the Base64 encoded result ShowMessage(Base64EncodeStr( Data)); end; procedure decrypt; var Cipher : TDCP_blowfish; Data, Key, IV : string; tkey, tdata, tiv : string; get : string; begin tkey := '12345678901234567890123456789012'; tdata := 'asdf'; tiv := '12345678'; get := IdHTTP1.Get('http://localhost/crypt/mawe.php'); // Pad Key and IV with zeros as appropriate Key := PadWithZeros(tkey,Keysize); IV := PadWithZeros(tiv,blocksize); // Decode the Base64 encoded string Data := Base64DecodeStr(get); // Create the cipher and initialise according to the key length Cipher := TDCP_blowfish.Create(Self); if Length(tkey) <= 16 then Cipher.Init(Key[1],128,@IV[1]) else if Length(tkey) <= 24 then Cipher.Init(Key[1],192,@IV[1]) else Cipher.Init(Key[1],256,@IV[1]); // Decrypt the data Cipher.DecryptCBC(Data[1],Data[1],Length(Data)); // Free the cipher and clear sensitive information Cipher.Free; FillChar(Key[1],Length(Key),0); // Display the result ShowMessage( Data+sLineBreak+get); end;
Code:
<?php
$key = "12345678901234567890123456789012"; $input = "Teststring"; $encrypted = mcrypt_cbc(MCRYPT_BLOWFISH,$key ,$input,MCRYPT_ENCRYPT,"12345678"); echo base64_encode($encrypted); ?> |
Re: Mit PHP verschlüsseln
Hallo Angel4585,
Inzwischen hast Du ja selbst eine Lösung gefunden. Ich wollte gerade nach einiger Zeit das (neben der Arbeit erstellte) Fragment unten abschicken. Bleibt jetzt eigentlich nur noch der Hinweis/Frage zum IV. Eigentlich sollte er ja nicht konstant sein, und müßte dann zwischen Delphi und PHP kommuniziert werden. Da er nicht geheim sein muss, kann man in zB als die ersten Zeichen versenden. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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