![]() |
Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Hallo,
ich hoffe hier benutzt jemand Lockbox 3 zur Datenverschlüsselung und kann mir bei meinem Problem weiterhelfen. Ich möchte Daten in AES und CBC Mode verschlüsseln und dann mit der PHP Funktion mcrypt_cbc() wieder entschlüsseln. Das ist die Lockbox Komponente:
Delphi-Quellcode:
Beim Klick auf eine Schltfläche soll eine Zeichenkette mit einem Passwort verschlüsselt werden.
object Codec1: TCodec
AsymetricKeySizeInBits = 1024 AdvancedOptions2 = [] CryptoLibrary = CryptographicLibrary1 Left = 496 Top = 40 StreamCipherId = 'native.StreamToBlock' BlockCipherId = 'native.AES-192' ChainId = 'native.CBC' end object CryptographicLibrary1: TCryptographicLibrary Left = 568 Top = 40 end
Delphi-Quellcode:
Ich erhalte z.B. die Base64kodierte zeichenkette: yMvS0IobfNR179gFFvyOE5+/cvm1bo1q+JfZ9WnFRtA=
procedure TfrmMain.Button1Click(Sender: TObject);
var base64Ciphertext : AnsiString; plaintext: String; begin plaintext := 'LockBox3Test'; Codec1.Cipher := 'native.AES-128' Codec1.Password := 'MeinPasswort123'; Codec1.EncryptString( plaintext, base64Ciphertext); boxCipherTextOut.Text := base64Ciphertext; end; Diese soll in den ersten 8 Bytes (Zeichen) den Initialisierungsvektor IV beinhalten. In Lockbox wird dieser aus Sicherheitsgründen ja zufällig erzeugt. Mein PHP Skript sieht jetzt folgendermaßen aus:
Delphi-Quellcode:
Leider erhalte ich nicht die ursprüngliche Zeichenkette.
<?php
$pwd = 'MeinPasswort123'; $cipherText = 'yMvS0IobfNR179gFFvyOE5+/cvm1bo1q+JfZ9WnFRtA='; $iv = substr ( $cipherText, 0, 8 ); $encryptedcbc = mcrypt_cbc(MCRYPT_RIJNDAEL_128, $pwd, $cipherText, MCRYPT_DECRYPT, $iv); echo 'CBC encrypted: '.base64_encode($encryptedcbc); ?> Was mache ich falsch? Habe ich beim Auslesen des IV einen Denkfehler? Besten Dank für jede Unterstützung. |
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Ohne auf die speziellen Implentationen einzugehen: In Deine Codebeispielen geistern zwei verschiedene Schlüssellängen herrum: 128 und 192 Bit. Versuch's mal überall mit derselben Länge.
|
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Zitat:
|
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Und auch noch ob man mit 8-Bit Ansi oder 8-Bit UTF-8 oder 16-Bit UTF-16 Codierten strings arbeitet.
Bei XE2 ist ein Character = 2 Byte. Die Frage ist ob Lockbox 3 schon das berücksichtigt oder hier noch mist baut. Und auch ob und wie PHP das erwartet. |
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Zitat:
Dazu kommen noch eventuell unterschiedliche Paddingversion bei CBC, wenn die Textlänge kein Vielfaches der Blocklänge ist. Außerdem muß ein IV 16 Bytes lang sein, da ist mit 8 Zeichen des Base64-Strings nichts zu machen. |
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Besten Dank für Eure schnellen Meinungen.
Zitat:
Zitat:
Sean, der Enwtickler von Lockbox schrieb folgendes: Zitat:
|
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Das mit dem IV ist Unsinn. Es gibt bei AES keine 8-Byte IVs! Irgendwo müssen noch 8 weitere Bytes herkommen: entweder 0, Sequenznummer oä.
Wenn ich Dich richtig verstehe, kannst Du auf PHP-Seite nichst ändern und willst die Delphi-Seite dazu bringen, kompatible Ciphertexte zu erstellen. Dazu ist es notwendig genau zu wissen, was die PHP-Seite macht. Abgesehen von Little/Big-Endian, Unicode etc hast Du schon auf Byteebene zu klären: - Wie wird ein Passwort in einen 128 bzw 192 Bit-Schlüssel überführt? Hashfunktion (wenn ja welche?) oder KDF (welche?) - Welches Padding wird werwendet wenn die Textlänge kein Vielfaches von 16 ist. Oder wird Ciphertext-Stealing verwendet? Das DEC-artige Umschalten auf CFB-8 scheint mir wieder selbstgestrickt und nicht-standard. - In welcher Form wird der IV erwartet. Erst wenn das alles geklärt ist, kannst Du auf Delphi-Seite anfangen. Notfalls halt IV, Padding und Schlüssel zu Fuß behandeln. |
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Zitat:
Delphi-Quellcode:
if Length(MeinPasswort) <= 16 then
Codec1.BlockCipherId := 'native.AES-128' else if Length(MeinPasswort) <= 24 then Codec1.BlockCipherId := 'native.AES-192' else Codec1.BlockCipherId := 'native.AES-256'; Zitat:
In PHP sehe ich, dass ZeroPadding verwendet wird. Zitat:
![]() |
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Zitat:
Zitat:
Zitat:
Also ist entweder LB grundsätzlich nicht für Deine Aufgabe geeignet (was ich mir aber nicht so richtig vorstellen kann), oder Du mußt Dich stark in das Produkt einarbeiten.:( Vielleicht sind ja einige Spezialisten dafür im Forum. |
AW: Lockbox 3: Daten verschlüsseln und in PHP entschlüsseln
Danke für Deine Bemühung, mir zu helfen. Bitte, eines noch: folgendes habe ich noch bei StackOverflow gefunden:
![]() Zitat:
Zitat:
Was ist "CFB-8 bit and treat as key-streaming"? Besten Dank. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:23 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