Şifreli alan karşılaştırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

Key2561, "Array of Char" cinsinden bir sabittir (const). Eğer sen değişken (variable) ve "string" kullanarak bir değer belirtmek istiyorsan öncelikle ekteki uCrypt.pas dosyasını kullanman gerekir.

Orjinal kod içinde aşağıdaki değişiklikleri yapmalısın ki önceki örnek compile edilebilsin.

Kod: Tümünü seç

procedure TForm10.btnCryptClick(Sender: TObject);
begin
  edtCrypt.Text := EncryptItAES(edtPlainText.Text, string(Key2561));
end;

procedure TForm10.btnDecryptClick(Sender: TObject);
begin
  edtDecrypt.Text := DecryptItAES(edtCrypt.Text, string(Key2561));
end;
Artık farklı bir anahtar değerini aşağıdaki şekilde kullanmak mümkün olacaktır. Label1.Caption özünde string olduğu için compiler hata vermeden çalışır.

Kod: Tümünü seç

  EncryptItAES(Edit1.Text, Label1.Caption);
Dosya ekleri
uCrypt.rar
değişken anahtar kullanımına uygun güncellenmiş dosya
(1.45 KiB) 139 kere indirildi
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Şifreli alan karşılaştırma

Mesaj gönderen pasa_yasar »

Yardımın için çok teşekkür ederim fakat hata verdi.

Kod: Tümünü seç

TAESCFB.DecryptPKCS7 : Invalid Content
key2561 yazdığım zaman çalışıyor key2561 değerini labelden aldığımda hata veriyor.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

Sorununu belirtirken biraz daha detay vermende fayda var. Yukarıdaki hatayı nerede alıyorsun? Compile ederken mi? Yoksa uygulama çalışırken mi?

Ben çalışırken diye düşünüyorum. Ben denediğimde uygulamanın compile edilmesinde sorun yok. Her iki parametre ile denedim. Sorunsuz çalışıyor.

Şifreleme yaptığın anahtar ne ise şifre açman gereken anahtar da aynı olmalı. Bu anlamda "Şifrele" butonu altındaki kodda eğer Label1.Caption kullandı isen "Şifre Çöz" butonu altındaki kodda da Label1.Caption kullanmalısın.

Yukarıda senin hata aldığın nokta şifre çözme olduğunu görüyorum. Şifre çöz butonu altındaki kodu kontrol etmende fayda var. Birinde Key2561 diğerinde Label1.Caption kullanman çalışma zamanında hata almana sebep olacaktır.
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Şifreli alan karşılaştırma

Mesaj gönderen pasa_yasar »

Hatayı çalışma zamanında aldım.
aynı parametreleri kullandım. Denemek için key2561 yerine

Kod: Tümünü seç

label1.caption := 'key2561'; 
yazdım.
aşağıdaki kod ile işlem yaptım. Anahtar aynı tek tek kontrol ettim. Belirttiğim gibi key2561 değerini labele aktarıp bunu yazınca hata veriyor.

Kod: Tümünü seç

   Username := DecryptItAES(Trim(bilgi1.caption), label1.caption); 
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

"bilgi1.caption" daha önceden EncryptItAES() ile şifrelenmiş bir bilgi mi?
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Şifreli alan karşılaştırma

Mesaj gönderen pasa_yasar »

evet gelen anahtar bilgi1.caption da yazılı
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

pasa_yasar yazdı:evet gelen anahtar bilgi1.caption da yazılı
Merhaba,

Ben "şifrelenmiş bilgi" dediğim zaman örnek göndermiş olduğum uygulamada "Şifrele" butonuna bastığın zaman *ortadaki Edit alanında* oluşan veriden bahsediyorum. Sen yukarıda "anahtar" dediğin zaman ise o şifreli bilgiyi oluşturmada kullanılan karıştırma verisini anlıyorum. Bir yerlerde ifade farklılığımız var sanırım.

Benim anladığım sanki sen bilgi1.caption içinde *anahtar* (Key2561 benzeri bir değer) var gibi bahsediyorsun. Bu durumda şifrelenmiş veri nerede?

Uygulamanın ilgili bölümünü paylaşman mümkün mü? Bununla birlikte yapmak istediğini biraz daha detaylı anlatabilir misin?
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Şifreli alan karşılaştırma

Mesaj gönderen pasa_yasar »

Aynı ekranda şifrelemeyi ve şifre çözmeyi test ediyorum

Kod: Tümünü seç

     
      
      sifrelenenmetin.text := EncryptItAES(Edit1.Text, String(key2561));

     	
      label1.caption   := 'key'+label10.caption+label11.caption+label12.caption+label13.caption; (key2561 yazacak sonuç olarak)

      cozulendeger.text := DecryptItAES(sifrelenenmetin.text, label1.caption);
      
Amacım ;
1. Bunun nedeni uygulama güvenliği yazarken aldığım değerler string değerler.
2. case of veya if ile şifre grubu belirtip risk almamak key2561,key2562,key2563 gibi bilgiyi göstermemek. Karşıdan key geldiğinde satır aralarında hangi key grubuna dahil olduğunu göndereceğim. Program şifre içinde key grubunu okuyup ona göre şifreyi çözecek
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Şifreli alan karşılaştırma

Mesaj gönderen pasa_yasar »

String parametreyi nasıl labelden nasıl okutabilirim diye baktım kodları inceledim ama çözemedim. Nacizane ingilizcem yetmiyor. Bende bu kodlara bir katkı yapmayı çok isterdim. Böyle sizi yormak veya yardım ummak hoş olmuyor ama başka çarem yok
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

Daha önce bahsettiğim gibi. Şifrelemeyi hangi anahtar ile yaptı isen o anahtar ile açmalısın. Sen verdiğin örnekte bunu yapmıyorsun.

Kod: Tümünü seç

  EncryptItAES(Edit1.Text, string(Key2561));
Yukarıdaki fonksiyon şifrelenmiş veri geri çevirir. Bu veriyi sen Key2561 sabit/değişken ile şifreliyorsun. Burada şunu gözden kaçırıyorsun sanki. Açmak için Label1.Caption değeri Key2561 değeri ile aynı olmalı. Key2561 bir değişken. String değer değil.

Aşağıdaki şekilde yaparsan sorunsuz çalışacaktır.

Kod: Tümünü seç

  label1.caption   := 'key'+label10.caption+label11.caption+label12.caption+label13.caption; // (key2561 yazacak sonuç olarak)
  sifrelenenmetin.text := EncryptItAES(Edit1.Text, label1.caption);
  cozulendeger.text := DecryptItAES(sifrelenenmetin.text, label1.caption);
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

Daha önce bahsettiğim gibi. Şifrelemeyi hangi anahtar ile yaptı isen o anahtar ile açmalısın. Sen verdiğin örnekte bunu yapmıyorsun.

Kod: Tümünü seç

  EncryptItAES(Edit1.Text, string(Key2561));
Yukarıdaki fonksiyon şifrelenmiş veri geri çevirir. Bu veriyi sen Key2561 sabit/değişken ile şifreliyorsun. Burada şunu gözden kaçırıyorsun sanki. Açmak için Label1.Caption değeri Key2561 değeri ile aynı olmalı. Key2561 bir değişken. String değer değil.

Aşağıdaki şekilde yaparsan sorunsuz çalışacaktır.

Kod: Tümünü seç

  label1.caption   := 'key'+label10.caption+label11.caption+label12.caption+label13.caption;
  sifrelenenmetin.text := EncryptItAES(Edit1.Text, label1.caption);
  cozulendeger.text := DecryptItAES(sifrelenenmetin.text, label1.caption);
Aşağıdaki şekilde de sorunsuz çalışacaktır

Kod: Tümünü seç

  sifrelenenmetin.text := EncryptItAES(Edit1.Text, string(Key2561));
  label1.caption   := string(Key2561);
  cozulendeger.text := DecryptItAES(sifrelenenmetin.text, label1.caption);
Kullanıcı avatarı
pasa_yasar
Üye
Mesajlar: 570
Kayıt: 07 Haz 2004 12:35

Re: Şifreli alan karşılaştırma

Mesaj gönderen pasa_yasar »

Çalıştı büyük adamsın üstat beni büyük bir dertten kurtardın. Allah bin kere razı olsun senden.
aegean
Üye
Mesajlar: 41
Kayıt: 24 Tem 2019 09:32

Re: Şifreli alan karşılaştırma

Mesaj gönderen aegean »

Merhaba gerci 2016 dan beri kimse buraya bir sey yazmamaıs ma benim bir sorum olsa
piyasa da internette bile online olarak kullanılabilen AES 128 ECB ile veri encode edip base64 olarak baska bir programa göndermem gerekiyor. Fakat ne yaptıysam kullanıdım componenetlerle bunu başaramadım porgram encode ettiğini decode ediyor ama benim encode ettiğim base64 paketi online utilitylerde ve benimle haberlesen programla test ettiğimde her zaman son blok düzgün padding edilmemiş hatası alıyorum bunula alakalı cokca örnek denedim kendim bazı değiiklikler yaptım olmadı. Sonucta Lockbox dan vazgectim Mormot syncyrpto ile denedim onda padding olayı da kendinden var ama onda da aynı onuc ve paketler inanaılmaz buyuk ve kimse de aes128 ecb örnegi uygulamamıs ben duzenlediiğimde de malesef sonuc husran kendim kapattıgımı acıyorum ama bir baskası acamıyor
Kullanmam gereken standart Aes 128 Ecb 16 lık sabit key 'CEAA31AD1EE4BDC8' örneği gibi buraya program örneklerini koysam 20 den fazla denemem var hangsini koyayım sizin bir oneriniz varmı? Aslında konuya hakim değilim ama bir yol başlangıc noktası önerirseniz oradan baslayayım, körlemesine bu iş altından kalkılmayacak gözukuyor.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: Şifreli alan karşılaştırma

Mesaj gönderen ertank »

Merhaba,
AES şifreleme yöntemi blok şifreleme yapar. 16byte bloklar şifrelenir her defasında.
Eğer sizin şifrelenecek veriniz 16nın katı değil ise son eksik kısımı 16byte olacak şekilde kendinizin doldurması gerekir. Buna padding deniliyor.
Padding yöntemi birden fazladır. Doldurulacak veriler hepsi sıfır olabilir. 1 olabilir vs. Bunların standart isimleri var ve PCKS#7 gibi isimlendirilmişlerdir.

Sizin iletişim kuracağınız yerden veya var ise çalıştığını bildiğiniz bir yerden kullanmanız gereken padding yöntemini öğrenmeniz ve kodunuzda uygulamanız gerekiyor.
zuluman
Üye
Mesajlar: 5
Kayıt: 14 Mar 2016 12:26
Konum: istanbul
İletişim:

Re: Şifreli alan karşılaştırma

Mesaj gönderen zuluman »

eski bir konuyu hortlatacağım fakat farklı bir yaklaşım ile şifre doğrulma manığı paylaşmak istedim.
kullanıcının şifre metnini procedure içinde hiç kullanmıyorum. bunun yerine şifre metinlerini, özet fonksiyonlarını kulanarak özet değerlerini veritabanına kaydediyorum ve karşılaştırma yapacağım zaman bu özet değerleri üzerinden yapıyorum. bu sayede şifreyi sadece şifre sahibi bilebilir.
AES simetrik bir şifreleme metodudur ve bir anahtara ihtiyacı vardır. Fakat bu anahtarı iyi saklayamazsanız uygulamanızı debug eden biri bulabilir. özet fonksiyonlarında böyle bir anahtara ihtiyac yoktur.
ben özet fonksiyonu olarak md5 kullandım. md5 için zayıf diyenler olabilir Aa1@ içeren 8 karakterli bir metnin özetini biraz kırmak zor ama imkansız değil. yada md5 özet değerini sha1 ile tekrar özetleyebilir yada md5 yerine sha3 kullanabilirsiniz.
bu mantığı wordpress kullanıcı doğrulama yapısından öğrendim belkide çoğu kişi zaten bu konuyu biliyordur.
Cevapla