Tam Sürümünü Görmek İçin : Güvenlik kodu uygulaması
c++ de güvenlik kodu uygulaması nasıl yapılır. c++ hakkında sıfır bilgisi olan birisi olarak bunu öğrenmek istiyorum.
acehreli
25/07/2005, 15:43
Boyle bir konu C++ dilinin ozunde bulunmadigi icin, cogu iste oldugu gibi yine kutuphaneler yoluyla halledilir.
Guvenlik kodu hizmetleri veren bir kutuphane bulunur ve o kutuphane icindeki islevler kutuphanenin belgelerinde anlatildigi sekilde ve sirada cagrilirlar.
Ali
guvenlik kodundan kasıt nedir..
bu web site lardaki resimdeki karakterleri baska bir kutucuga girdigimiz şeyleri mi kastediyorsun..
evet fakat ben bunu ayrı bir sistemde uygulatmak istiyorum (ircd açılışında) servera bağlanırken devam etmek istiyorsanız abcde yazıp enter e basın gibi geçici bir engelleme ve bu şekilde trojan saldırılarını durdurmak amaç...
resmi üretmesi kolayda.. senin uygulamanla c++ uygulaması arasında nasıl bi bağ olucak.. yani kullanıcının girdiği güvenlik kodu kontrolu nerede yapılacak, rastgele karakterler c++ programında mı üretilecek dısarıdan mı alınacak... vs vs..
resimlerle ilgili CImg kütüphaneleri var ama kütüphanenin içinde font ile ilgili doğru düzgün hiç bişi bulamadım ( http://cimg.sourceforge.net/ )..
Bir tane basit bişi yaptım ama dediğim gibi fontlar çok ufak ve dökümantasyonunu didik didik ettiğim halde bu sorunu çözemedim..
Kaynak kod ile örnek ekte de var..
#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>
#include "CImg/CImg.h"
using namespace std;
using namespace cimg_library;
int main()
{
unsigned int xBoyut = 100;
unsigned int yBoyut = 50;
string karakterler = "";
srand(time(NULL));
int karakterSayisi = rand() % 5 + 5; // DIKKAT: rand() sakat.. guvenlik kodu uzunlugu 5 ile 10 karakter
for (int f=0; f != karakterSayisi; ++f)
{
int aralik[2];
int charMiSayiMi = rand() % 2;
if (0 == charMiSayiMi)
{
aralik[0] = 97;
aralik[1] = 123;
}
else
{
aralik[0] = 48;
aralik[1] = 58;
}
karakterler += rand() % (aralik[1] - aralik[0]) + aralik[0];
}
CImg<unsigned char> resim(xBoyut, yBoyut, 1, 3, 5);
unsigned char beyaz[] = {255, 255, 255};
// unsigned char kirmizi[] = {200, 0, 0};
// unsigned char yesil[] = {0, 200, 0};
unsigned char mavi[] = {0, 0, 200};
resim.draw_fill(0, 0, beyaz);
resim.draw_text(karakterler.c_str(),
10 - karakterler.size(), // yazi tasmasin diye
10, mavi, beyaz, CImgl<unsigned char>::get_font10x13(true));
resim.blur(0.5);
for (int f=0; f != 100; ++f)
{
resim.draw_line(rand() % xBoyut, rand() & yBoyut, rand() % xBoyut, rand() % yBoyut, mavi, ~0, 0.1);
}
resim.save_convert("resim.jpg");
return 0;
}
Bu kodun birçok sorunu var aslında.. örneğin rand().. sonra etrafta birsürü literal dolaşıyo (sihirli sayılarla boğuşmak var)...
CImg de font la ilgili biraz sorun var.. örneğin yazıtipini ile boyutunu bi türlü kendim ayarlayamıyorum..
Birde forumun bi yerinde okumuştum.. Euclides in köydeki dayısı OCR diye bişi bulmuş 8) (optical character recognition).. yani buna da önlem alınması gerekiyo..
yani bu kodun release olması için çok çok yol kat etmesi gerek..
(Birde yukarıdaki kodu derleyebilmeniz için ImageMagicK nın derleyiciniz için olan versionunun yüklü olması gerekir. çünkü CImg jpg ye cevirmek icin bu kütüphanelere ihtiyaç duyuyor... http://sourceforge.net/projects/imagemagick/ )
isteklerini biraz daha açmalısın..
Forum Yazılımı : vBulletin v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.