Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
AES Şifreleme Hakkında
#11
Aşağıda örnek kodu paylaştığım PHP de aslında tek satırda bu işin ne kadar kolay olduğunu göreceksiniz. Şimdilik bunu kullanarak Delphi tarafına json olarak aktarıyorum ama bu çözümü kullanmak da istemiyorum. Delphi tarafında gerek forumda gerekse nette yaptığım araştırmalarda elde ettiğim kodların hiçbirisi bana nedense doğru çözümü vermedi. Denediğim kodlar bir türlü doğru şifreleme yapmıyor. AES-256-ECB olarak aşağıdaki gibi bana doğru şifreleme yapacak Delphi kodu aramaya devam ediyorum. Netice elde edebilirsem bunu da paylaşacağım.

function encrypt( $key, $plain ) {

    echo "\n iv=\t\t(binary as hex)\t". bin2hex( $iv ). "\tlength=". strlen( $iv );

    // By default OpenSSL already returns Base64, but it could be changed 
    // to binary with the 4th parameter, if we want.

$iv= '';

    $encryptedData= base64_encode ( openssl_encrypt( $plain, CIPHER, $key, $options=OPENSSL_RAW_DATA, $iv) );

    echo "\n encrypted=\t(Base64)\t". $encryptedData;

    // The encrypted data already came in Base64 - no need to encode it
    // again in Base64. Just concatenate it with the initialization
    // vector, which is the only part that should also be encoded to
    // Base64. And now we have a 7bit-safe ASCII text, which could be
    // easily inserted into emails.

    return $encryptedData;
}
Ne ekersen onu biçersin!  Idea
Cevapla
#12
Xor-el - CryptoLib4Pascal kütüphanesinde var AES şifreleme fakat delphi yeni sürümlerde hiç denemedim.
https://github.com/Xor-el/CryptoLib4Pascal
WWW
Cevapla
#13
Örnek veri ve sonuç var mı?

Şu olabilir.
AES-256-ECB ile Key:=1234567890123456 veri:="test"
için sonucu paylaşır mısınız?
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#14
   

   

Android, iOS, Windows, macOS ve Linux platformlarında çalışıyor. Harici bir kütüphane kullanılmadı.
Begin : = end / 2;
Cevapla
#15
(13-02-2024, Saat: 12:48)tmrksmt Adlı Kullanıcıdan Alıntı: Aşağıda örnek kodu paylaştığım PHP de aslında tek satırda bu işin ne kadar kolay olduğunu göreceksiniz. ....

Tüm programlama dillerinde "base64" şifrelemesi (ki, key olmadan bu bir şifreleme değildir) hazır birer fonksiyondur. Kolay olması buradan geliyor. 

Eklediğim dll'i import edebilseydiniz, paylaştığınız php kodu gibi 3-5 satırdan ibaret basit bir Delphi kodu olacacaktı.
Cevapla
#16
(13-02-2024, Saat: 14:08)engerex Adlı Kullanıcıdan Alıntı: Örnek veri ve sonuç var mı?

Şu olabilir.
AES-256-ECB ile Key:=1234567890123456 veri:="test"
için sonucu paylaşır mısınız?

verdiğiniz veriler ile aşağıdaki sonucu verdi bana,

KEY        : 1234567890123456 (16)
IV(bos)         :  (0)
DATA       : test (4)

ECB        : dfa12e17 (4)
CBC        : c6585d93 (4)

ECB_BASE64 : 36EuFw== (8)
CBC_BASE64 : xlhdkw== (8)

yada ;

KEY : 1234567890123456 (16)
IV(bos) : (0)
DATA : test (4)

ECB : 61bc9ce8 (4)
CBC : 50f83875 (4)

ECB_BASE64 : Ybyc6A== (8)
CBC_BASE64 : UPg4dQ== (8)
WWW
Cevapla
#17
(09-02-2024, Saat: 19:43)3ddark Adlı Kullanıcıdan Alıntı: Bursa'daki şifreleme kütüphanesine bakın
https://github.com/MHumm/DelphiEncryptionCompendium
https://github.com/Delphier/TAES

https://github.com/Delphier/TAES
@3ddark paylaştığı linkteki örneği aşağıdaki gibi değiştirdiğimde : "zsBwXiUHqbiAFRun5ZwEHA=="
Bunu bir kontrol eder misin?
 OriginalText := TEncoding.ANSI.GetBytes('test');
 Key := TEncoding.ANSI.GetBytes('12345678901234561234567890123456'); // 256 bits-32 bytes
 IV := TEncoding.ANSI.GetBytes(''); // 16 bytes

 EncryptedText := TAES.Encrypt(OriginalText, Key, 256, IV, cmECB, pmPKCS7);
 Memo1.Text := TNetEncoding.Base64.EncodeBytesToString(EncryptedText);
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
Cevapla
#18
Aşağıdaki uygulama için https://fundementals.sourceforge.net/dl.html adresindeki Cipher sınıflarından yararlandım. AES için sadece cCipherAES.pas dosyasını kullanmak yetiyor ve son derece basit bir yapısı var. Fakat sadece 16 bayt lık veri için örnek hazırlamışlar ve 128bit. AesEncrypter adında yeni bir sınıf hazırlayarak 128/256 bit özelliği ekledim. Base64 ve Hex çıktıları verebiliyor. Standart olarak ECB yani elektronik kod kitaplığı kullanıyor. AES için 256 bit şifreleme yapacaksanız 32, 128 bit şifreleme yapacaksanız 16 baytlık özel anahtar belirtmeniz gerekiyor. Doğruluk testi için şifrelenmiş metni mümkün mertebe Copy to Clipboard butonu ile kopyalayın. Memo kontrolünün Wrap özelliğini kapatıp, Horizontal özelliğini açsamda metni bölümleme yapmaya devam etti. Bu durumda direk CRLF karakterleri ekleniyor.

Doğrulama için https://anycript.com/ adresini kullandım.

a3mrWJZ.png


JSON ifadesinin AES 256 Bit ile şifreleme örneği.
procedure TForm1.Button3Click(Sender: TObject);
var
 AESEncrypter: TAESEncrypter;
 SecretKey: Utf8String;
 EncText: Utf8String;
 JObject: TJSONObject;
 EncryptedText: String;
begin
 JObject := TJSONObject.Create
   .AddPair('username', TJSONString.Create('delphi.developer'))
   .AddPair('hash', TJSONString.Create('ed8e44a5eea79ac15208241091261124d67a81239689a243e0f88565c8c0f5cd'));
 EncText := JObject.ToJSON;
 JObject.Free;

 SecretKey := 'AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB';
 AESEncrypter := TAESEncrypter.Create(bt256, SecretKey, EncText);
 try
   EncryptedText := AESEncrypter.GetBase64String;
 finally
   AESEncrypter.Free;
 end;
end;


AES şifrelemede 128bit yahut 256bit anahtar kullansanız dahi, veri 16 baytlık yani 128 bitlik bloklar halinde şifreleniyor.
Buradan hareketle sizin şifreleme metniniz 16 bayt dan fazla ise Padding yani byte dolguları eklemeniz gerekiyor. Ve bunların belli bir dizilimi var.
AesEncrypter sınıfını yazarken bunları ayarlamak durumunda kaldım. Bu işlemlerin nasıl yapıldığını https://www.youtube.com/watch?v=3OTMLUEPZUc animasyonlu olarak ilgili youtube videosu ile keşfedebildim. İlgilenenler için son derece yararlı olabilir.

AesEncryper uygulama ve sınıflarına ait tüm kodlar makale ekinde mevcuttur.


Ek Dosyalar
.zip   AES.zip (Dosya Boyutu: 124,3 KB / İndirme Sayısı: 8)
Cevapla
#19
Öncelikle tüm cevap yazan arkadaşlara çok teşekkür ederim.

(14-02-2024, Saat: 01:42)delphi.developer Adlı Kullanıcıdan Alıntı: Aşağıdaki uygulama için https://fundementals.sourceforge.net/dl.html adresindeki Cipher sınıflarından yararlandım. AES için sadece cCipherAES.pas dosyasını kullanmak yetiyor ve son derece basit bir yapısı var. Fakat sadece 16 bayt lık veri için örnek hazırlamışlar ve 128bit. AesEncrypter adında yeni bir sınıf hazırlayarak 128/256 bit özelliği ekledim. Base64 ve Hex çıktıları verebiliyor. Standart olarak ECB yani elektronik kod kitaplığı kullanıyor. AES için 256 bit şifreleme yapacaksanız 32, 128 bit şifreleme yapacaksanız 16 baytlık özel anahtar belirtmeniz gerekiyor. Doğruluk testi için şifrelenmiş metni mümkün mertebe Copy to Clipboard butonu ile kopyalayın. Memo kontrolünün Wrap özelliğini kapatıp, Horizontal özelliğini açsamda metni bölümleme yapmaya devam etti. Bu durumda direk CRLF karakterleri ekleniyor.

Doğrulama için https://anycript.com/ adresini kullandım.

a3mrWJZ.png


JSON ifadesinin AES 256 Bit ile şifreleme örneği.
procedure TForm1.Button3Click(Sender: TObject);
var
 AESEncrypter: TAESEncrypter;
 SecretKey: Utf8String;
 EncText: Utf8String;
 JObject: TJSONObject;
 EncryptedText: String;
begin
 JObject := TJSONObject.Create
   .AddPair('username', TJSONString.Create('delphi.developer'))
   .AddPair('hash', TJSONString.Create('ed8e44a5eea79ac15208241091261124d67a81239689a243e0f88565c8c0f5cd'));
 EncText := JObject.ToJSON;
 JObject.Free;

 SecretKey := 'AAAAAAAAAAAAAAAABBBBBBBBBBBBBBBB';
 AESEncrypter := TAESEncrypter.Create(bt256, SecretKey, EncText);
 try
   EncryptedText := AESEncrypter.GetBase64String;
 finally
   AESEncrypter.Free;
 end;
end;


AES şifrelemede 128bit yahut 256bit anahtar kullansanız dahi, veri 16 baytlık yani 128 bitlik bloklar halinde şifreleniyor.
Buradan hareketle sizin şifreleme metniniz 16 bayt dan fazla ise Padding yani byte dolguları eklemeniz gerekiyor. Ve bunların belli bir dizilimi var.
AesEncrypter sınıfını yazarken bunları ayarlamak durumunda kaldım. Bu işlemlerin nasıl yapıldığını https://www.youtube.com/watch?v=3OTMLUEPZUc animasyonlu olarak ilgili youtube videosu ile keşfedebildim. İlgilenenler için son derece yararlı olabilir.

AesEncryper uygulama ve sınıflarına ait tüm kodlar makale ekinde mevcuttur.

Kardeşim Allah razı olsun tam istediğim gibi doğru şifreleme yapan kolay bir çözüm sunmuşsun. İşimi gördü sağol, varol... 
Diğer arkadaşlara da çok teşekkür ederim.
Ne ekersen onu biçersin!  Idea
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  TDictionary kullanımım hakkında yhackup 3 277 09-02-2024, Saat: 15:58
Son Yorum: SimaWB
  TfrxReport Rapor dizaynı hakkında yhackup 2 173 24-01-2024, Saat: 11:35
Son Yorum: yhackup
  EdgeBrowser Hakkında bydelphi 2 453 19-11-2023, Saat: 10:21
Son Yorum: bydelphi
  Webp formatı gösterimi hakkında adelphiforumz 1 441 16-03-2023, Saat: 20:52
Son Yorum: uparlayan
  Delphi 7 Veri Tabanı İşlemi Hakkında mahone 6 940 28-02-2023, Saat: 15:36
Son Yorum: mahone



Konuyu Okuyanlar: 1 Ziyaretçi