Delphi 10.2 Aes sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
seci20

Delphi 10.2 Aes sorunu

Mesaj gönderen seci20 »

Merhaba ustalarım. Uzun süredir uğraştığım ama bir türlü çözüme kavuşturamadığım bir hata var. Şuanki projemi Delphi 10.2 versiyonu ile geliştiriyorum. Bir hesaplama yapmam gerekli Aes 256-ECB üzerinden yalnız bir türlü doğru hesaplamayı yapamıyorum. Aynı kodları delphi 7 üzerinden yaptığımda sorunsuz yapabiliyorum ama 10.2 versiyonunda bir türlü doğru hesaplama yapamıyorum.

Aes hesaplama için kullandığım kütüphane linki şu şekilde.



https://github.com/StephenGenusa/DCPCrypt



Hesapladığım kod ise şu şekilde.

Kod: Tümünü seç

Function StrToHex(s: ansiString;const ters:boolean=false): ansiString;
Var
 i : Integer;
Begin
 Result:='';
 If Length(s)>0 Then
   For i:=1 To Length(s) Do
   begin
     if ters=False then
   Result:=IntToHex(Ord(s[i]),2)+Result
   else
   Result:=Result+IntToHex(Ord(s[i]),2);
   end;

End;
function aescalcualtor (key:Ansistring):Ansistring;
var
 Cipher : TDCP_rijndael;
 IV     : Ansistring;
 Data  : Ansistring;
 i:integer;
 Buffer : Ansistring;

begin
 Data := #$00#$01#$02#$03#$04#$05#$06#$07#$08#$09#$0a#$0b#$0c#$0d#$0e#$0f;
 IV   := '';
 Cipher := TDCP_rijndael.Create(nil);
 Cipher.Init(Key[1], 256, @IV[1]);

 SetLength(Buffer,16);
 Cipher.EncryptECB(Data[1], Buffer[1]);
Result:=buffer;
end;


procedure TForm1.btn1Click(Sender: TObject);
begin


mmo1.Lines.Add(StrToHex(aescalcualtor('11')));
end;

Delphi 7 çıktısı ve doğru olanı


B1CD5BE4ED3DBE649DA2FD2100FB47AF


Delphi 10.2 ise şu şekilde.


527C056F6F9C657B07A1B209B38544CE


String olarak değiştirdim ansistring yaptım malasef bir türlü doğru hesaplama yaptıramıyorum. Doğru olanı delphi 7 hesaplıyor ama 10.2 malasef doğru hesaplama yapmıyor. Yardımlarınız için şimdiden çok teşekkür ederim. Doğru bir hesaplama yapan farklı bir kütüphane var ise elinizde fikirlerinizi belirtirseniz çok memnun olurum şimdiden...
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7586
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Re: Delphi 10.2 Aes sorunu

Mesaj gönderen mussimsek »

Benzer bir dönüşüm için uzun bir süre uğraştıktan sonra, yeni delphi sürümlerinin string'leri farkı işlediğini öğrendim. Delphi 10.2'de {$ZEROBASEDSTRINGS OFF} direktifini ekleyerek deneyin.

Kod: Tümünü seç

...
implementation

{$ZEROBASEDSTRINGS OFF}

uses
...
Kolay gelsin.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Delphi 10.2 Aes sorunu

Mesaj gönderen ertank »

Merhaba,

Şifreleme rutinleri Byte üzerinden çalışırlar. Siz string üzerinden çalıştırmak istiyorsunuz. Benim bilgime göre bu bir hata.

Delphi 7: string = AnsiString ve 1 karakter her zaman 1 byte olur.
Delphi 10.2: string = UnicodeString ve 1 karakter her zaman 1 byte olmayıp daha fazla olabilir.

Eğer şifreleme rutinleri byte üzerinden çalışabiliyor ise şifrelenecek bilgiyi byte haline çevirerek kullanmayı deneyebilirsiniz. Her iki Delphi sürümünde de aynı byte bilgisini gönderdiğinizi debug kısmında kontrol edin. Bu durumda çıktılarının da aynı olması gerekli.
seci20

Re: Delphi 10.2 Aes sorunu

Mesaj gönderen seci20 »

Hocam cevap verdiğiniz için çok teşekkür ederim tekrar baştan byte olarak yazdım ve sorunu çözüm sonunda çok teşekkür ederim tekrardan.
Cevapla