Autor Beitrag
Seven of Nine
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 1

Win XP, Win Vista HomePro
Delphi 2009
BeitragVerfasst: 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)

ausblenden 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..15of Byte = ($32,$43,$f6,$a8,$88,$5a,$30,$8d,  $31,$31,$98,$a2,$e0,$37,$07,$34);
  AES_IV  :       Array [0..15of Byte = ($00,$01,$00,$01,$00,$01,$00,$01,  $00,$01,$00,$01,$00,$01,$00,$01);
  Cipher_Block  : Array [0..15of Byte = ($9b,$dd,$38,$72,$36,$8f,$6d,$67,  $39,$44,$dd,$9e,$14,$29,$3f,$35);
  Cipher_OutData: Array [0..15of Byte;

begin
  Cipher := TDCP_rijndael.Create(nil);
  Cipher.Init      (AES_Key, SizeOf(AES_Key)*8, @AES_IV);
  //Cipher.EncryptCBC(Cipher_InData, Cipher_Block, Length(Cipher_InData) );
  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


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  TByteArray = Array of Byte;

Var 
  Cipher_OutData: TByteArray;  //nicht "Array [0..15] of Byte;"
....
  SetLength(Cipher_OutData,length(Cipher_Block));
  Cipher.DecryptCBC(Cipher_Block, Cipher_OutData, Length(Cipher_Block) );  //wie vorher



ich erhalte dann aber ein "leeres" Byte Array durch die Funktion "Cipher.DecryptCBC(..." zurück
wo liegt mein (Denk)fehler?

lG Martin
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: 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:
ausblenden 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 user profile iconNarses: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 1

Win XP, Win Vista HomePro
Delphi 2009
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 25.04.12 21:05 
Moin!

user profile iconSeven of Nine hat folgendes geschrieben Zum zitierten Posting springen:
Danke für deinen Hinweis Narses, du hast mir dmit geholfen!
:shock: :gruebel: Ähm, ich habe nur die Tags dazugebaut, geholfen hat dir user profile iconuall@ogc! :beer: :zustimm:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Seven of Nine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 1

Win XP, Win Vista HomePro
Delphi 2009
BeitragVerfasst: Mi 25.04.12 21:38 
Oupsss, Danke Daniel !
Seven of Nine Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 1

Win XP, Win Vista HomePro
Delphi 2009
BeitragVerfasst: 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

ausblenden 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//und so weiter bis byte 16
  SetLength(AES_IV ,16);
  AES_IV[0]    := $01;  AES_IV[1]  := $02//und so weiter bis byte 16

  aBlockSize := 20016//or any other number, maybe NOT a factor of 16 Bytes
  Setlength(EncryptedData,aBlockSize);  
  Setlength(DecryptedData, aBlockSize);
  ms.Position := $0 ; //position innerhalb eines memory streams von wo ich die "encrypteten Daten auslese", hier: von Position 0 an
  ms.Read(EncryptedData[0], aBlockSize);  //array of bytes zum entschlüsseln auffüllen 

  Cipher := TDCP_rijndael.Create(nil);
  Cipher.Init(AES_Key, Length(AES_Key)*8, @AES_IV);
  Cipher.Reset;  
  Cipher.DecryptCBC(EncryptedData[0], DecryptedData[0], aBlockSize); //-> ByteArray “DecryptedData” sollte die entschluesselten daten beinhalten, leider passt das derzeit noch nicht;
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: So 29.04.12 13:36 
user profile iconSeven of Nine hat folgendes geschrieben Zum zitierten Posting springen:
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..15of 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 1

Win XP, Win Vista HomePro
Delphi 2009
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
procedure Init(const Key; Size: longword; InitVector: pointer); virtual;					


lG Martin