![]() |
Delphi-Version: XE
AES-Encryption zwischen Delphi und Rest der Welt
Hallo Delphi-Praxis-Community,
suche nun schon seit mehreren Stunden nach einer Lösung zu einem (meiner Meinung nach simplen) Problem, konnte bisher aber leider nichts finden und wende mich nun verzweifelt an euch :) Eigentliches Ziel ist folgendes: Wir arbeiten mit einem C#-Webservice der derzeit die Daten unverschlüsselt an die aufrufende Stelle zurückgibt. Da der Webservice allerdings nicht für die Öffentlichkeit bestimmt ist wollen wir diesen mit AES Rjindael verschlüsseln. Mein Kollege hat schon irgendwo aus dem Internet eine Verschlüsselung kopiert. Diese kann zwischen C# Webservice und C# Anwendung kommunizieren. Da er selbst aber keine genaue Ahnung hat was da passiert, dachte ich, bevor ich die Verschlüsselung am Webservice nun anpasse, stelle ich sicher, dass Delphi erstmal irgendwas ver- und entschlüsselt, dass einem Allgemein kompatiblen Standard entspricht. Delphi ist aus Erfahrung immer etwas weniger flexibel, daher mein Gedanke: "Wenn ich was finde, bei dem es mit Delphi klappt, klappt das dann höchstwahrscheinlich auch in C#" Also habe ich mir einen Online-Encrypter gesucht ( ![]() mit der Prämisse: In Delphi einen verschlüsselten String zu generieren, den ich dort nachstellen kann. Habe nun bereits mehrere verschiedene Lösungen und Libraries durchprobiert und nutze derzeit DEC mit folgendem Code (vermutlich irgendwo von Stackoverflow kopiert)
Delphi-Quellcode:
dazu diesen Aufruf:
function CCFDecrypt(const CCF: Binary; const Password: Binary): Binary;
begin with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(Password, #0, $00); result := DecodeBinary(CCF, TFormat_MIME64); finally Free; end; end; function CCFEncrypt(const CCF: Binary; const Password: Binary): Binary; begin with TCipher_Rijndael.Create do try Mode := cmCFB8; Init(Password, #0, $00); result := EncodeBinary(CCF, TFormat_MIME64); finally Free; end; end;
Delphi-Quellcode:
Der verschlüsselte Text "asd" mit dem Password "asd" ergibt den String "htz5"
var
Password, Data: Binary; begin Password := 'asd'; Data := CCFEncrypt('asd', Password); Data := CCFDecrypt(Data, Password); nun schaffe ich es aber nicht, auch nicht mit anderen Modes in Delphi, einen String zusammenzubauen den ich in dem Onlinetool genauso generieren kann. Ich weiß nicht was ich falsch mache aber habe das Gefühl gehörig auf dem Schlauch zu stehen. Grüße |
AW: AES-Encryption zwischen Delphi und Rest der Welt
Wenn du das Gleiche mit etwas Gleichem bearbeitest/umwandelst, kommt auch das Gleiche heraus.
Jede Verschlüsselung/Komprimierung arbeitet mit einer Bytefolge. Alles muss also vorher in so eine Bytefolge rein und da hat der Frosch die Locken. Was denn für eine Kodierung bei dem String? ANSI, UTF8, UTF16, ... da muss man sich auf das Gleiche einigen :stupid: |
AW: AES-Encryption zwischen Delphi und Rest der Welt
Zusätzlich zum vorherigen Beitrag:
Wie wird denn der AES-Schlüssel aus dem Passwort abgeleitet? Welche Schlüsselgröße wird überhaupt benutzt (128,192 oder 256 Bit)? Ich finde keine Angaben dazu in Deiner Frage. |
AW: AES-Encryption zwischen Delphi und Rest der Welt
Wenn die Daten nur während der Übertragung verschlüsselt sein sollen, würde ich Transport Layer Security verwenden: wenn der Webservice HTTP basiert ist, einfach auf HTTPS umstellen.
|
AW: AES-Encryption zwischen Delphi und Rest der Welt
Zitat:
|
AW: AES-Encryption zwischen Delphi und Rest der Welt
Zitat:
Zitat:
Die Schlüsselgröße, habe ich online gelesen, ist bei DEC 128 Bit Zitat:
|
AW: AES-Encryption zwischen Delphi und Rest der Welt
Zitat:
Im übrigen wäre ich skeptisch, wenn gesagt wird uses the mcrypt_encrypt() in PHP ohne daß das genauer spezifiziert ist. In dem PHP manual link wird gesagt, daß, wenn eine Schlüssellänge nicht unterstützt wird, false geliefert wird. Ein 24-Bit Schlüssel a la ASCII "asd" kann nun garantiert nicht benutzt werden. Also ...??? Da Du CFB-8 benutzen willst, hast Du noch ein anderes Problem: Dieser Modus benutzt einen IV (Initialisierungs-Vektor), ich sehe keine Möglichkeit der Eingabe (und das bedeutet noch mehr implizite Annahmen). |
AW: AES-Encryption zwischen Delphi und Rest der Welt
Zitat:
Im Web ist UTF8 üblich in Delphi UTF16 :stupid: |
AW: AES-Encryption zwischen Delphi und Rest der Welt
...
|
AW: AES-Encryption zwischen Delphi und Rest der Welt
Vorweg: Es klappt nun, trotzdem noch Antworten zu allen Fragen.
Zitat:
Zitat:
Zitat:
![]() Zitat:
DEC bietet bei Init als zweitem Parameter
Delphi-Quellcode:
die Möglichkeit diesen zu setzen.
Init(Password, #0, $00);
Lasse mir jetzt alles als Hexvalue statt Base64 ausgeben (da das zweite Tool nur Hex anbietet) Tool gibt bei Eingabe: Text "asd" Password "617364" (Hexwert von asd) und IV von #0 dem Wert 86dcf9 aus. Delphi mit den eingangs verwendeten Parametern ebenfalls. Ich vermute also, der Code war die ganze Zeit richtig, das Tool mit dem ich die Richtigkeit prüfen wollte war einfach nur nutzlos :) Danke euch allen für das (in einem Delphi-Forum) immens schnelle Feedback und schönen Tag Edit: Zitat:
Haben damals (bei der Erstentwicklung des Webservice) auch Authentifizierungsmethoden gesucht. Allerdings konnte ich damals absolut nichts finden, das kompatibel war zwischen c# REST-Webservice und Delphi Anwendung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:54 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