Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Delphi 12 Decrypt - Encrypt Hatası
#1
Heart 
Merhaba, iyi forumlar  My

Delphi 12'de bir Win32 projem var ve MacOS'a derlemeye çalışıyorum. Bir lisans dosyam var ve bu dosyayı Windowsta çalıştırdığımda Decrypt-Encrypt işlemleri başarılı çalışırken; MacOS'a geldiğim zaman hata veriyor ve Texti çözümleyemiyor.

Bunun için hazır bir kod vs. var mı bilmiyorum? Daha önce bu işlemleri yapmış olan birisi varsa yardımcı olabilirse çok memnun olurum. Stackowerflowda gezdim fakat çok işe yarar bir şey bulamadım. 

Encrypt kodum;
class function TCryptionHelper.EncryptText(pKey: string; AText: string): string;
var
 Source: TMemoryStream;
 Dest: TMemoryStream;
 Size: integer;
 Key: TAESKey128;
 str: ansistring;
 strTemp: TStringList;
begin
 try
   Result := '';

   if Trim(pKey).IsEmpty then
     pKey := AESKey;

   AText := Trim(AText);
   Source := TMemoryStream.Create();
   Dest   := TMemoryStream.Create();
   strTemp := TStringList.Create;
   try
     // Save data to memory stream...
     Source.Write(PAnsiChar(AnsiString(AText))^, length(AText));
     Source.Position := 0;
     Size := Source.Size;
     Dest.WriteBuffer(Size, SizeOf(Size));
     // Prepare key...
     FillChar(Key, SizeOf(Key), 0);
     Move(PAnsiChar(AnsiString(pKey))^, Key, Min(SizeOf(Key), Length(pKey)));
     // Start encryption...
     EncryptAESStreamECB( Source, 0, Key, Dest );
     //Label_Time.Caption := IntToStr(Stop - Start) + ' ms';

     // Display encrypted text using hexadecimals...
     Dest.Position := 0;
     setlength(str, Dest.Size);
     Dest.Read(PAnsiChar(str)^, Dest.Size);
     strTemp.Text := StringToHex( str );
     Result := strTemp.Text;
   finally
     Source.Free;
     Dest.Free;
     strTemp.Free;
   end;
 except on E: Exception do
   begin
     Result := 'Encrypt Error: ' + E.ToString;
   end;
 end;
end;


Decrypt kodum;
class function TCryptionHelper.DecryptText(pKey: string; pEncryptedText: string): string;
var
 Source: TMemoryStream;
 Dest: TMemoryStream;
 Size: integer;
 Key: TAESKey128;
 str: AnsiString;
 decryptedText: string;
begin
 Result := '';
 try
   if Trim(pKey).IsEmpty then
     pKey := AESKey;

   pEncryptedText := Trim(pEncryptedText);

   Source := TMemoryStream.Create( );
   Dest   := TMemoryStream.Create( );
   try
     str := HexToString( pEncryptedText );
     Source.Write(PAnsiChar(str)^, length(str));
     Source.Position := 0;
     // Start decryption...
     Size := Source.Size;
     Source.ReadBuffer(Size, SizeOf(Size));
     // Prepare key...
     FillChar(Key, SizeOf(Key), 0);
     Move(PAnsiChar(AnsiString(pKey))^, Key, Min(SizeOf(Key), Length(pKey)));
     // Decrypt now...
     DecryptAESStreamECB(Source, Source.Size - Source.Position, Key, Dest);
     // Display unencrypted text...
     Dest.position := 0;
     SetLength(str, dest.Size);
     Dest.Read(PAnsiChar(str)^, dest.Size);
     decryptedText := str;
     Result := decryptedText;
   finally
     Source.Free;
     Dest.Free;
   end;
 except on E: Exception do
   begin
     Result := 'Decrypt Error: ' + E.ToString;
   end;
 end;
end;
Cevapla
#2
Uygulamanız Windows ve macOS hedef platformlarında çalıyorsa, muhtemelen FMX mimarisinde geliştiriyorsunuz. 
Bu nedenle konuyu Genel Programlama bölümünden, Mobil Platform - FireMonkey (FMX) bölümüne taşıdık.
Sorunun daha hızlı çözümü adına, EncryptAESStreamECB ve DecryptAESStreamECB metodlarınızın FMX mimarisine uygun yazılıp, yazılmadığını kontrol edin.
FMX için geliştirilmiş ise oluşan hata kodlarını paylaşın yardımcı olmaya çalışalım.
Begin : = end / 2;
Cevapla
#3
(27-06-2024, Saat: 10:51)RAD Coder Adlı Kullanıcıdan Alıntı: Uygulamanız Windows ve macOS hedef platformlarında çalıyorsa, muhtemelen FMX mimarisinde geliştiriyorsunuz. 
Bu nedenle konuyu Genel Programlama bölümünden, Mobil Platform - FireMonkey (FMX) bölümüne taşıdık.
Sorunun daha hızlı çözümü adına, EncryptAESStreamECB ve DecryptAESStreamECB metodlarınızın FMX mimarisine uygun yazılıp, yazılmadığını kontrol edin.
FMX için geliştirilmiş ise oluşan hata kodlarını paylaşın yardımcı olmaya çalışalım.
Yanlışım için üzgünüm. Evet FMX mimarisinde geliştiriyoruz. Android uygulaması da mevcut. Genel olarak aldığım hata attığım fonksiyonların çalışmamasından kaynaklı sanırım. Yani debug attığımda fonksiyonları geçiyor fakat text'e baktığımda şifreyi düzgün çevirmemiş oluyor. Bundan kaynaklı hatalar alıyorum.
Cevapla
#4
Kullandığınız kütüphane FMX mimarisine göre yazılmamıştır. 
Farklı bir AES kütüphanesi kullanın.
Ben AES için OrangeUI kütüphanesini kullanıyorum.
Begin : = end / 2;
Cevapla
#5
(27-06-2024, Saat: 11:55)RAD Coder Adlı Kullanıcıdan Alıntı: Kullandığınız kütüphane FMX mimarisine göre yazılmamıştır. 
Farklı bir AES kütüphanesi kullanın.
Ben AES için OrangeUI kütüphanesini kullanıyorum.

OrangeUI kütüphanesinin AES işlemlerinde kullanılabildiğini bilmiyordum. İnternette de bir kod bulamadım bununla alakalı. Bir örnek vs. mevcut mu acaba? 
DCPCrypt kütüphanesine baktım onunda Delphi12'de çalışacak kadar güncelini bulamadım maalesef.
Cevapla
#6
Aşağıdaki metodlarla yapabilirsiniz.
//Encrypt
AESEncryptStrToBase64('Şifrelenecek metin', 'anahtarınız', TEncoding.Unicode, TEncoding.UTF8, TKeyBit.kb128, 'başlangıç vektör değeri'{IV Key},
   TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);

//Decrypt
AESDecryptStrFromBase64('Çözülecek metin', 'anahtarınız', TEncoding.Unicode, TEncoding.UTF8, TKeyBit.kb128,  'başlangıç vektör değeri'{IV Key},
   TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);
Kurulum klasöründe, demo uygulaması var. 
OrangeUI FMX 2.3 For D12 VIP\OrangeProjectCommon\FlyUtilsEncrypt\Demos\AES
Begin : = end / 2;
Cevapla
#7
(27-06-2024, Saat: 10:00)kajmerantime Adlı Kullanıcıdan Alıntı: Merhaba, iyi forumlar  My

Delphi 12'de bir Win32 projem var ve MacOS'a derlemeye çalışıyorum. Bir lisans dosyam var ve bu dosyayı Windowsta çalıştırdığımda Decrypt-Encrypt işlemleri başarılı çalışırken; MacOS'a geldiğim zaman hata veriyor ve Texti çözümleyemiyor.

Bunun için hazır bir kod vs. var mı bilmiyorum? Daha önce bu işlemleri yapmış olan birisi varsa yardımcı olabilirse çok memnun olurum. Stackowerflowda gezdim fakat çok işe yarar bir şey bulamadım. 

Encrypt kodum;
class function TCryptionHelper.EncryptText(pKey: string; AText: string): string;
var
 Source: TMemoryStream;
 Dest: TMemoryStream;
 Size: integer;
 Key: TAESKey128;
 str: ansistring;
 strTemp: TStringList;
begin
 try
   Result := '';

   if Trim(pKey).IsEmpty then
     pKey := AESKey;

   AText := Trim(AText);
   Source := TMemoryStream.Create();
   Dest   := TMemoryStream.Create();
   strTemp := TStringList.Create;
   try
     // Save data to memory stream...
     Source.Write(PAnsiChar(AnsiString(AText))^, length(AText));
     Source.Position := 0;
     Size := Source.Size;
     Dest.WriteBuffer(Size, SizeOf(Size));
     // Prepare key...
     FillChar(Key, SizeOf(Key), 0);
     Move(PAnsiChar(AnsiString(pKey))^, Key, Min(SizeOf(Key), Length(pKey)));
     // Start encryption...
     EncryptAESStreamECB( Source, 0, Key, Dest );
     //Label_Time.Caption := IntToStr(Stop - Start) + ' ms';

     // Display encrypted text using hexadecimals...
     Dest.Position := 0;
     setlength(str, Dest.Size);
     Dest.Read(PAnsiChar(str)^, Dest.Size);
     strTemp.Text := StringToHex( str );
     Result := strTemp.Text;
   finally
     Source.Free;
     Dest.Free;
     strTemp.Free;
   end;
 except on E: Exception do
   begin
     Result := 'Encrypt Error: ' + E.ToString;
   end;
 end;
end;


Decrypt kodum;
class function TCryptionHelper.DecryptText(pKey: string; pEncryptedText: string): string;
var
 Source: TMemoryStream;
 Dest: TMemoryStream;
 Size: integer;
 Key: TAESKey128;
 str: AnsiString;
 decryptedText: string;
begin
 Result := '';
 try
   if Trim(pKey).IsEmpty then
     pKey := AESKey;

   pEncryptedText := Trim(pEncryptedText);

   Source := TMemoryStream.Create( );
   Dest   := TMemoryStream.Create( );
   try
     str := HexToString( pEncryptedText );
     Source.Write(PAnsiChar(str)^, length(str));
     Source.Position := 0;
     // Start decryption...
     Size := Source.Size;
     Source.ReadBuffer(Size, SizeOf(Size));
     // Prepare key...
     FillChar(Key, SizeOf(Key), 0);
     Move(PAnsiChar(AnsiString(pKey))^, Key, Min(SizeOf(Key), Length(pKey)));
     // Decrypt now...
     DecryptAESStreamECB(Source, Source.Size - Source.Position, Key, Dest);
     // Display unencrypted text...
     Dest.position := 0;
     SetLength(str, dest.Size);
     Dest.Read(PAnsiChar(str)^, dest.Size);
     decryptedText := str;
     Result := decryptedText;
   finally
     Source.Free;
     Dest.Free;
   end;
 except on E: Exception do
   begin
     Result := 'Decrypt Error: ' + E.ToString;
   end;
 end;
end;

Merhabalar,

https://github.com/PassByYou888/CoreCipher/tree/master

İncelermisiniz lütfen.

Kolay gelsin.
Amaç, bilginin de/aklın da zekat'ını vermek.
Cevapla
#8
(28-06-2024, Saat: 13:52)hi_selamlar Adlı Kullanıcıdan Alıntı:
(27-06-2024, Saat: 10:00)kajmerantime Adlı Kullanıcıdan Alıntı: Merhaba, iyi forumlar  My

Delphi 12'de bir Win32 projem var ve MacOS'a derlemeye çalışıyorum. Bir lisans dosyam var ve bu dosyayı Windowsta çalıştırdığımda Decrypt-Encrypt işlemleri başarılı çalışırken; MacOS'a geldiğim zaman hata veriyor ve Texti çözümleyemiyor.

Bunun için hazır bir kod vs. var mı bilmiyorum? Daha önce bu işlemleri yapmış olan birisi varsa yardımcı olabilirse çok memnun olurum. Stackowerflowda gezdim fakat çok işe yarar bir şey bulamadım. 

Encrypt kodum;
class function TCryptionHelper.EncryptText(pKey: string; AText: string): string;
var
 Source: TMemoryStream;
 Dest: TMemoryStream;
 Size: integer;
 Key: TAESKey128;
 str: ansistring;
 strTemp: TStringList;
begin
 try
   Result := '';

   if Trim(pKey).IsEmpty then
     pKey := AESKey;

   AText := Trim(AText);
   Source := TMemoryStream.Create();
   Dest   := TMemoryStream.Create();
   strTemp := TStringList.Create;
   try
     // Save data to memory stream...
     Source.Write(PAnsiChar(AnsiString(AText))^, length(AText));
     Source.Position := 0;
     Size := Source.Size;
     Dest.WriteBuffer(Size, SizeOf(Size));
     // Prepare key...
     FillChar(Key, SizeOf(Key), 0);
     Move(PAnsiChar(AnsiString(pKey))^, Key, Min(SizeOf(Key), Length(pKey)));
     // Start encryption...
     EncryptAESStreamECB( Source, 0, Key, Dest );
     //Label_Time.Caption := IntToStr(Stop - Start) + ' ms';

     // Display encrypted text using hexadecimals...
     Dest.Position := 0;
     setlength(str, Dest.Size);
     Dest.Read(PAnsiChar(str)^, Dest.Size);
     strTemp.Text := StringToHex( str );
     Result := strTemp.Text;
   finally
     Source.Free;
     Dest.Free;
     strTemp.Free;
   end;
 except on E: Exception do
   begin
     Result := 'Encrypt Error: ' + E.ToString;
   end;
 end;
end;


Decrypt kodum;
class function TCryptionHelper.DecryptText(pKey: string; pEncryptedText: string): string;
var
 Source: TMemoryStream;
 Dest: TMemoryStream;
 Size: integer;
 Key: TAESKey128;
 str: AnsiString;
 decryptedText: string;
begin
 Result := '';
 try
   if Trim(pKey).IsEmpty then
     pKey := AESKey;

   pEncryptedText := Trim(pEncryptedText);

   Source := TMemoryStream.Create( );
   Dest   := TMemoryStream.Create( );
   try
     str := HexToString( pEncryptedText );
     Source.Write(PAnsiChar(str)^, length(str));
     Source.Position := 0;
     // Start decryption...
     Size := Source.Size;
     Source.ReadBuffer(Size, SizeOf(Size));
     // Prepare key...
     FillChar(Key, SizeOf(Key), 0);
     Move(PAnsiChar(AnsiString(pKey))^, Key, Min(SizeOf(Key), Length(pKey)));
     // Decrypt now...
     DecryptAESStreamECB(Source, Source.Size - Source.Position, Key, Dest);
     // Display unencrypted text...
     Dest.position := 0;
     SetLength(str, dest.Size);
     Dest.Read(PAnsiChar(str)^, dest.Size);
     decryptedText := str;
     Result := decryptedText;
   finally
     Source.Free;
     Dest.Free;
   end;
 except on E: Exception do
   begin
     Result := 'Decrypt Error: ' + E.ToString;
   end;
 end;
end;

Merhabalar,

https://github.com/PassByYou888/CoreCipher/tree/master

İncelermisiniz lütfen.

Kolay gelsin.

Tavsiyeniz için teşekkür ederim. Repoyu indirip derlerken bir çok hata alıyorum. DCPCrypt kütüphanesi kullanarak işlem yapmaya çalışıyorum fakat yinede bir sonuç alamadım. macOS ve IOS'ta derleyeceğim için UTF-8 ile şifrelemem gerekiyor. Şu an windows ve android için kullandığımız lisans dosyamız ansistring şeklinde şifrelenmiş. Durum karışık açıkçası pek bir fikrim yok.
Cevapla
#9
(28-06-2024, Saat: 11:52)RAD Coder Adlı Kullanıcıdan Alıntı: Aşağıdaki metodlarla yapabilirsiniz.
//Encrypt
AESEncryptStrToBase64('Şifrelenecek metin', 'anahtarınız', TEncoding.Unicode, TEncoding.UTF8, TKeyBit.kb128, 'başlangıç vektör değeri'{IV Key},
   TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);

//Decrypt
AESDecryptStrFromBase64('Çözülecek metin', 'anahtarınız', TEncoding.Unicode, TEncoding.UTF8, TKeyBit.kb128,  'başlangıç vektör değeri'{IV Key},
   TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);
Kurulum klasöründe, demo uygulaması var. 
OrangeUI FMX 2.3 For D12 VIP\OrangeProjectCommon\FlyUtilsEncrypt\Demos\AES

Android için olan lisans dosyam ansistring formatıyla şifrelenmiş. MacOS Ansi desteklemiyor, UTF-8 destekliyor sanırım. Bu lisans içerisindeki ansi şifreyi deşifre edip utf-8 formatında şifrelemem gerekiyor. Bu konuda olan düşüncem yanlış mı? Demoyu açtım fakat decrypt yapamıyor.
Cevapla
#10
(05-07-2024, Saat: 10:01)kajmerantime Adlı Kullanıcıdan Alıntı:
(28-06-2024, Saat: 11:52)RAD Coder Adlı Kullanıcıdan Alıntı: Aşağıdaki metodlarla yapabilirsiniz.
//Encrypt
AESEncryptStrToBase64('Şifrelenecek metin', 'anahtarınız', TEncoding.Unicode, TEncoding.UTF8, TKeyBit.kb128, 'başlangıç vektör değeri'{IV Key},
   TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);

//Decrypt
AESDecryptStrFromBase64('Çözülecek metin', 'anahtarınız', TEncoding.Unicode, TEncoding.UTF8, TKeyBit.kb128,  'başlangıç vektör değeri'{IV Key},
   TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);
Kurulum klasöründe, demo uygulaması var. 
OrangeUI FMX 2.3 For D12 VIP\OrangeProjectCommon\FlyUtilsEncrypt\Demos\AES

Android için olan lisans dosyam ansistring formatıyla şifrelenmiş. MacOS Ansi desteklemiyor, UTF-8 destekliyor sanırım. Bu lisans içerisindeki ansi şifreyi deşifre edip utf-8 formatında şifrelemem gerekiyor. Bu konuda olan düşüncem yanlış mı? Demoyu açtım fakat decrypt yapamıyor.

Şöyle deneyin.
AESDecryptStrFromBase64('Çözülecek metin', 'anahtarınız', TEncoding.ANSI, TEncoding.ANSI, TKeyBit.kb128,  'başlangıç vektör değeri'{IV Key},
  TPaddingMode.pmPKCS5or7RandomPadding, True, rlCRLF, rlCRLF, Nil);
3. Parametredeki encoding, dönecek değerin kodlamasını gösterir. 
4. parametredeki encoding ise anahtar değerinin kodlamasıdır. 
Bunları değiştirerek istediğiniz doğru sonucu elde edebilirsiniz.
Begin : = end / 2;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  OrangeUI kurulum hatası 41linea41 9 429 16-01-2025, Saat: 17:57
Son Yorum: shooterman
  Delphi 12.2 rmPOST hatası admar 1 155 31-12-2024, Saat: 08:32
Son Yorum: 3ddark
  Thread Cannot call Start on a running or suspended thread hatası Jakarta2 3 221 02-12-2024, Saat: 13:37
Son Yorum: Jakarta2
Photo Errors hatası Kral 6 324 09-11-2024, Saat: 14:19
Son Yorum: mcuyan
  TestFlight Dağıtım (iOS) - Transporter Hatası kajmerantime 7 262 01-11-2024, Saat: 09:23
Son Yorum: RAD Coder



Konuyu Okuyanlar: 1 Ziyaretçi