Autor |
Beitrag |
Seven of Nine
      
Beiträge: 132
Erhaltene Danke: 1
Win XP, Win Vista HomePro
Delphi 2009
|
Verfasst: Di 24.04.12 21:03
Hallo,
Ich kämpfe gerade mit der Einbindung von DCPCrypt
hier ein Stück SourceCode, das so gesehen auch das tut was es soll
ich generiere für AES einen Key und einen IV dazu
übergebe dann ein "gecryptetes" 16 ByteArray (Cipher_Block)
und erhalte das "entcryptete" 16 ByteArray zurück(Cipher_OutData)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| Var Cipher : TDCP_rijndael; AES_Key : Array [0..15] of Byte = ($32,$43,$f6,$a8,$88,$5a,$30,$8d, $31,$31,$98,$a2,$e0,$37,$07,$34); AES_IV : Array [0..15] of Byte = ($00,$01,$00,$01,$00,$01,$00,$01, $00,$01,$00,$01,$00,$01,$00,$01); Cipher_Block : Array [0..15] of Byte = ($9b,$dd,$38,$72,$36,$8f,$6d,$67, $39,$44,$dd,$9e,$14,$29,$3f,$35); Cipher_OutData: Array [0..15] of Byte;
begin Cipher := TDCP_rijndael.Create(nil); Cipher.Init (AES_Key, SizeOf(AES_Key)*8, @AES_IV); Cipher.Reset; Cipher.DecryptCBC(Cipher_Block, Cipher_OutData, Length(Cipher_Block) ); Cipher.Burn; Cipher.Free; end; |
soweit so gut, ABER, ich möchte die Ver/Entschlüsselung nicht mit einem fixen Array (16 Byte)
sondern mit einem dynamischen definierbarem Array of Byte machen dessen Größe ich zur Laufzeit auch merfach ändern könnte.
hierzu würe ich folgende Änderungen zu oben vornehmen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type TByteArray = Array of Byte;
Var Cipher_OutData: TByteArray; .... SetLength(Cipher_OutData,length(Cipher_Block)); Cipher.DecryptCBC(Cipher_Block, Cipher_OutData, Length(Cipher_Block) ); |
ich erhalte dann aber ein "leeres" Byte Array durch die Funktion "Cipher.DecryptCBC(..." zurück
wo liegt mein (Denk)fehler?
lG Martin
|
|
uall@ogc
      
Beiträge: 1826
Erhaltene Danke: 11
Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
|
Verfasst: Mi 25.04.12 13:32
Du solltest das nächste mal besser gleich dazuschreiben um welche Komponente es sich handelt. Die Funktion sieht so aus:
Delphi-Quelltext 1:
| procedure DecryptCBC(const Indata; var Outdata; Size: longword); virtual; |
also musst du bei einem Dyn. Array statt
Cipher_Block, Cipher_OutData
immer
Cipher_Block[0], Cipher_OutData[0]
übergeben.
Moderiert von Narses: Delphi-Tags hinzugefügt
_________________ wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Für diesen Beitrag haben gedankt: Seven of Nine
|
|
Seven of Nine 
      
Beiträge: 132
Erhaltene Danke: 1
Win XP, Win Vista HomePro
Delphi 2009
|
Verfasst: Mi 25.04.12 20:44
Danke für deinen Hinweis Narses, du hast mir dmit geholfen!
wie du völlig korrekt gemerkt hast hatte ich hier im Sourcecode in meinem Aufruf die "[0]" bei der Übergabe vergessen.
Das ganze hatte ich in meinem Testsourcecode zwar drin aber aus versehen hier nicht geschrieben und dort einen fehler bei der Längendefinition eines Der Arays gemacht
wie auch immr jetzt klappts
DICKES DANKE !!!
lG Martin
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 25.04.12 21:05
Moin!
Seven of Nine hat folgendes geschrieben : | Danke für deinen Hinweis Narses, du hast mir dmit geholfen! |
 Ähm, ich habe nur die Tags dazugebaut, geholfen hat dir uall@ogc!
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Seven of Nine 
      
Beiträge: 132
Erhaltene Danke: 1
Win XP, Win Vista HomePro
Delphi 2009
|
Verfasst: Mi 25.04.12 21:38
|
|
Seven of Nine 
      
Beiträge: 132
Erhaltene Danke: 1
Win XP, Win Vista HomePro
Delphi 2009
|
Verfasst: So 29.04.12 06:23
Ich kämpfe leider noch immer, bzw. wieder mit dem Thema
Ich möchte eigentlich "Nur" ein vorgegebenes "array of byte" entschlüsseln (Größe vorgegeben zb 20016 bytes)
Ich kenne den zu verwendenden Crypt-Algo -> “128bit aes encryption mit cbc ohne padding“ (ich denke mal das läuft unter "Rjindael")
Key und IV sind bekannt und beide 16 bytes lang
Ich weiß wie das Ergebnis aussehen soll, leider liefert mir mein compilierter Sourcecode nicht das decryptete Ergebnis das ich erwarte
und ich weiß nicht was ich falsch mache.
Ich vermute meinen Fehler in der fehlenden Umsetzng des "cbc"
weiß aber nicht wie ich das mit der Komponente machen sollte, bzw ob/wie ich das einstellen muss
was ich mir auch noch denken könnte, ist das ich keine "Hash-Operatione" anwende
mir ist auch ehrlich gesagt nicht ganz klar was diese genau machen, bzw ob ich das überhaupt benötige
(ich will ja "nur" “128bit aes encryption mit cbc ohne padding“ entschlüsseln)
Help please!
hier mein aktueller Code
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Var EncryptedData, DecryptedData: TByteArray; AES_Key, AES_IV : TByteArray;
begin SetLength(AES_Key,16); AES_Key[0] := $00; AES_Key[1] := $BA; SetLength(AES_IV ,16); AES_IV[0] := $01; AES_IV[1] := $02; aBlockSize := 20016; Setlength(EncryptedData,aBlockSize); Setlength(DecryptedData, aBlockSize); ms.Position := $0 ; ms.Read(EncryptedData[0], aBlockSize); Cipher := TDCP_rijndael.Create(nil); Cipher.Init(AES_Key, Length(AES_Key)*8, @AES_IV); Cipher.Reset; Cipher.DecryptCBC(EncryptedData[0], DecryptedData[0], aBlockSize); Cipher.Burn; Cipher.Free; |
ich haette natuerlich auch kein Problem eine andere Komponente einzusetzen.
Voraussetzung: ich muesste wissen wie man damit folgenden Job erledigt
- ein vorliegendes Array of Byte mit “128bit aes encryption mit cbc ohne padding“ korrekt entschluesseln
lG Martin
|
|
Gammatester
      
Beiträge: 328
Erhaltene Danke: 101
|
Verfasst: So 29.04.12 13:36
Seven of Nine hat folgendes geschrieben : | Ich kämpfe leider noch immer, bzw. wieder mit dem Thema |
Warum verwendest Du denn nicht die natürliche Deklaration var AES_Key, AES_IV: array[0..15] of byte; sondern dieses unsägliche TByteArray? Und wenn Du es schon (aus welchen Gründen auch immer) hernimmst, warum benutzt Du EncryptedData[0] aber nicht AES_Key[0], AES_IV[0]? TByteArray ist doch dynamisch, also wohl ein Pointer, und Pascal würde eigentich @AES_Key^[0] verlangen. Wer weiß, welches Compilergewusel Delphi dafür @AES_IV veranstaltet? (Meinem Pascalverständnis nach, ist das die Adresse des Pointers AES_Key, aber nicht die Adresse des 0.-ten Bytes). Dem wirst Du ohne Probleme mit dem array[0..15] of byte aus dem Weg gehen.
Gruß Gammatester
PS: Dir ist aber schon klar, daß "128bit aes encryption mit cbc ohne padding" nur mglich ist bei Textlängen, die ein Vielfaches der Blocklänge sind?
Für diesen Beitrag haben gedankt: Seven of Nine
|
|
Seven of Nine 
      
Beiträge: 132
Erhaltene Danke: 1
Win XP, Win Vista HomePro
Delphi 2009
|
Verfasst: So 29.04.12 15:01
Hallo Grammatester
Mein Sonntagnachmittag ist gerettet, vielen Dank.
ich hatte mal wieder den Wald vor lauter Bäumen nicht gesehen. Aber ich denke mal genau für so etwas sind Foren wie diese auch da!
Das mit dem Pointer für den IV ist übrigens so normal, liegt an der Defintion der DCPCrypt Init-Routine
Delphi-Quelltext 1:
| procedure Init(const Key; Size: longword; InitVector: pointer); virtual; |
lG Martin
|
|
|