AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Mit PHP verschlüsseln

Ein Thema von Angel4585 · begonnen am 24. Jul 2008 · letzter Beitrag vom 31. Jul 2008
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#11

Re: Mit PHP verschlüsseln

  Alt 25. Jul 2008, 11:41
Hi,

schau mal beim Michael beim FileCrypter. Dort ist eine Datei Encrypt.pas. In der ist ein Beispiel, wie man das DEC richtig verwendet.
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#12

Re: Mit PHP verschlüsseln

  Alt 25. Jul 2008, 14:50
Also bei mir funzt das nicht
Wende ich das richtig an?
Delphi:
Delphi-Quellcode:
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;
PHP:
Code:
<?php
$key = "Passwort";
$input = "Teststring";
$encrypted = mcrypt_cbc(MCRYPT_BLOWFISH,$key ,$input,MCRYPT_ENCRYPT,'12345678');
echo bin2hex($encrypted);
?>
Die Ausgabe:
---------------------------
Testprog
---------------------------
Delphi: E51A3C77A4D01A2BA9D3
PHP: e51a3c77a4d01a2b4540b5e1767b982b
---------------------------
OK
---------------------------

Eins iss megakurz das andere länger.. kp..
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#13

Re: Mit PHP verschlüsseln

  Alt 25. Jul 2008, 18:31
Zitat von Angel4585:
---------------------------
Testprog
---------------------------
Delphi: E51A3C77A4D01A2BA9D3
PHP: e51a3c77a4d01a2b4540b5e1767b982b
---------------------------
OK
---------------------------

Eins iss megakurz das andere länger.. kp.. :(
Hagen's DEC Code kannst Du so vergessen, da er, wenn der Quelltext nicht Blocklänge (bei Blowfish 8 Byte) hat, den Rest mit CFB8 bearbeitet. PHP sieht sinnvoll aus: da 10 Zeichen verschlüsselt werden, kommen 2 Blocks = 16 Bytes = 32 Hexnibbels raus.

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
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#14

Re: Mit PHP verschlüsseln

  Alt 25. Jul 2008, 18:59
Zitat von gammatester:
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.
Nachtrag zu den beiden Punkten:

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
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Mit PHP verschlüsseln

  Alt 31. Jul 2008, 11:37
Ich komm da nicht weiter
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? ) und Base64.
Beides aber ja nicht gerade sicher
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#16

Re: Mit PHP verschlüsseln

  Alt 31. Jul 2008, 13:28
ES GEEEEHT!!!

Delphi-Quellcode:
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;
Und das PHP Pendant(Schreibt man das so? ) zur Encrypt Methode dazu:

Code:
<?php


$key = "12345678901234567890123456789012";
$input = "Teststring";
$encrypted = mcrypt_cbc(MCRYPT_BLOWFISH,$key ,$input,MCRYPT_ENCRYPT,"12345678");
echo base64_encode($encrypted);


?>
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#17

Re: Mit PHP verschlüsseln

  Alt 31. Jul 2008, 14:35
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:
es ist eigentlich einfacher als ich gedacht hatte. Dein PHP-Codefragment benutzt nämlich 0-Padding (nicht wie ich irrtümlich geschrieben hatte PKCS). Also Du must nur auf Vielfaches der Blocklänge (=8) mit binär 0 auffüllen. Hier ein DEC-Bsp-Prog, daß die PHP-Ausgabe reproduziert:

Delphi-Quellcode:
program php_bf_demo;

{$apptype console}

uses
  SysUtils, Classes,DECCipher,decfmt;

var
  d: TCipher_Blowfish;
  s: string;
begin
  d := TCipher_Blowfish.create;
  d.Mode := cmCBCx;
  d.Init('Passwort','12345678');
  s := d.EncodeBinary('Teststring'#0#0#0#0#0#0,TFormat_HEX);
  writeln('DEC: ',s);
  writeln('PHP: ', 'E51A3C77A4D01A2B4540B5E1767B982B');
end.
Ausgabe:
DEC: E51A3C77A4D01A2B4540B5E1767B982B
PHP: E51A3C77A4D01A2B4540B5E1767B982B
Gruß Gammatester
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:30 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