Profile Image

Mustafa Yakın

| Bilgisayar Mühendisi |


Skills:



Experience:
HTML
CSS
JavaScript
WordPress
MS-Office
PHP
MSSQL
PL-SQL
Mustafa Yakın

TCP Tabanlı Şifreli Mesajlaşma Uygulaması


 

TCP Tabanlı Şifreli Mesajlaşma Uygulaması

Bu proje, güvenli bir haberleşme altyapısı oluşturmak amacıyla TCP tabanlı, uçtan uca şifrelemeli bir mesajlaşma uygulaması geliştirmeyi hedeflemektedir. Kullanıcılar, çevrimiçi veya çevrimdışı olmalarına bakılmaksızın birbirleriyle güvenli bir şekilde mesajlaşabilecek, veriler AES algoritması ile şifrelenerek korunacaktır.

Arayüz Tasarımı ve Açıklamaları

Giriş ekranı

 

Uygulamaya erişim, kayıt ve giriş mekanizmalarıyla sağlanmaktadır:

  • Kayıt Ekranı: Kullanıcılar, kullanıcı adı, şifre ve dinleme portu bilgileriyle yeni bir hesap oluşturabilir. Varsayılan olarak 5000 portu seçilmektedir.
  • Giriş Ekranı: Kullanıcılar giriş yaptıklarında sistem tarafından IP adresleri otomatik olarak kaydedilir ve güncellenir. Şifreler, güvenlik amacıyla SHA-256 algoritması ile hashlenerek saklanır.

Kullanıcı yönetimi

Kullanıcı bilgileri users tablosunda saklanır. Tabloda şu alanlar bulunmaktadır:

  • ID: Kullanıcı kimliği
  • USERNAME: Kullanıcı adı
  • PASSWORD: SHA-256 ile hashlenmiş şifre
  • ISONLINE: Kullanıcının çevrimiçi olup olmadığı
  • IPADDRESS: Kullanıcının IP adresi
  • PORT: Kullanıcının dinlediği port

Kullanıcı oturum açtığında isOnline değeri güncellenir ve IP adresi kayıt edilir. Çıkış yapıldığında veya uygulama kapandığında bu bilgiler sıfırlanır.

Ana ekran ve kullanıcı arayüzü

  • Menü ve Geçişler: Kullanıcılar, uygulama içinde menü çubuğunu kullanarak farklı bölümlere geçiş yapabilir.
  • Kullanıcı Listesi: Çevrimiçi kullanıcılar yeşil, çevrimdışı olanlar kırmızı olarak gösterilir.
  • Mesaj Gönderme ve Görüntüleme: RichTextBox bileşeni kullanılarak mesajlar gösterilir. Bir kullanıcı seçilmeden gönder butonu aktif hale gelmez.

 

Kullanıcı çevrimiçi olduktan sonra Database’de online kısmı güncellenir ve 1 değerini alır.

 

Mesajlaşma mantığı

Çevrimiçi Kullanıcılara Mesaj Gönderme

Eğer alıcı kullanıcı çevrimiçiyse, TCP bağlantısı üzerinden mesaj iletilir:

  • TCP Listener: Kullanıcı belirli bir portu dinlemeye başlar.
  • IP ve Port Doğrulama: Kullanıcının IP adresi ve port bilgisi users tablosundan çekilir.
  • İletim Durumu: Mesaj başarıyla iletilirse gönderene ACK (onay) mesajı döner. Hata durumunda mesaj başarısız olur.

Çevrimdışı Kullanıcılara Mesaj Gönderme

Eğer kullanıcı çevrimdışıysa, mesaj messages tablosuna kaydedilir:

  • Gönderim Öncesi Kontrol: Kullanıcının online olup olmadığı kontrol edilir.
  • Mesaj Kaydı:
    • ID: Mesaj kimliği
    • SENDER_ID: Gönderen kullanıcı ID
    • RECEIVER_ID: Alıcı kullanıcı ID
    • MESSAGE: AES ile şifrelenmiş mesaj
    • SENT_AT: Gönderim tarihi
    • ISDELIVERED: Mesajın iletilip iletilmediğini gösteren alan (0: Teslim edilmedi, 1: Teslim edildi)
  • Mesajın Alıcıya Teslim Edilmesi: Kullanıcı tekrar online olduğunda sistem mesajları kontrol eder ve görüntüler.

 

Çevrimdışı mesaj gönderim simülasyonu

Offline kullanıcıya mesaj gönderildiğinde mesaj karşı tarafa iletilemeyecek, kullanıcı online olduğunda mesajı görüntüleyebilmesi için database’ye kaydediyoruz:

Burada database’nin bir görüntüsünü görebiliriz, burada mesajlar şifreli bir şekilde database’de tutuluyor, mesajın ne zaman gönderildiği ve teslim edilip edilmediği sütunlarını içeriyor. AES şifreleme metodu kullanılmıştır, kırılması zor olduğu için bu kriptoloji metodu tercih edilmiştir.

AES şifreleme metodu için oluşturulan class

Çevrimiçi mesaj gönderme simülasyonu

Eğer kullanıcı online ise burada izlenecek yol TCP ile mesaj gönderimidir. Burada TCPlistener ile client start butonuna basarak bir portu sürekli dinlemeye alırız. Karşı taraf mesajı göndereceği ip adresi ve portu zaten users tablosundan çekebiliyor. Eğer karşı tarafın port bilgisi yanlışsa karşı tarafa iletilemediğine dair bir hata mesajı bize geri dönüyor, veya karşı taraf dinlemeyi başlatmadıysa eğer mesaj yine alıcı tarafa iletilemiyor. Eğer mesaj düzgün bir şekilde iletilirse bir ACK mesajı bize geri dönüyor. Ayrıca online bir kullanıcıya mesaj atarsak database’nin messages tablosunda isdelivered sütununun 1 olduğunu görebiliriz.

Port dinleme başlatma

start butonu ile listener eventi başlatılıyor ve 5000 portundan dinleme yapılabiliyor. Eğer bunu yapmadan karşı taraftan mesaj almaya çalışırsak karşı tarafın mesajı bize ulaşamıyor.

Port durdurma

Stop butonu ile dinlemeye başladığımız portu serbest bırakabiliyoruz, bunu yapma amacımız iki farklı kullanıcı aynı portu dinleyemiyor TCP buna izin vermiyor. başka bir kullanıcı daha aynı port değerine sahipse start komutunu bastığında hata mesajıyla karşılaşıyor. Ayrıca bu kısımı formclosing event’ine de ekledim program kapatıldığında port serbest bırakılıyor.

Port update

Port güncelleme kısmı ile kullanıcı kendi dinlemek istediği portu 100 100 değiştirebiliyor.

UML Diyagramı

 

FlowChart

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Developed By mustafaYakin, Original Theme: Resume X