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ı

















