Pvp Server | Pvp Serverler | Metin2 Pvp İp Adresleri | Knight Online Bilgi Paylaşım Platforumu

Would you like to react to this message? Create an account in a few clicks or log in to continue.


    Hesap Güvenliği (Password MD5 Şifreleme)

    LiveYourLife
    LiveYourLife
    Forum Kurucusu
    Forum Kurucusu


    Mesaj Sayısı Mesaj Sayısı : 525
    Leader Point: Leader Point: : 17845
    Kayıt tarihi Kayıt tarihi : 19/01/10
    Nerden Nerden : Derinliklerden :)

    Yeni Hesap Güvenliği (Password MD5 Şifreleme)

    Mesaj tarafından LiveYourLife Perş. Şub. 11, 2010 2:54 pm

    Selamlar,

    Umarım En Yararlı Paylaşım Olur,

    Bu
    Sistemin Size Faydaları DB niz Çalınsa Bile Kullanıcılarınızın Şifresi
    Asla Gözükmez, Bu Yüzden Herhangi Bir Korkunuz Olmaz Onu Bırakın
    Serverınıza Girmiş Olsalar Bile Şifreler Karşılarına,

    0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0 AB49

    Şeklinde Çıkacaktır, Bu Şifreyi Alıp Yazsa Bile Geçersizdir, Kesinlikle
    Decrypti Herhangi Bir Yerde Yoktur. (MSSQL 2005'te Test Edilmiştir ve
    Şuanda Kendi Sunucumda Çalışmaktadır.)

    Kısacası Kendilerini
    Yırtsalarda Bu Şifrelerin Orjinal Hallerini Göremezler, İsterse DB deki
    Herşeyi Silsinler Veriler Bu Şekilde Kalır ve DECYPT(Çözümlenemez)
    Edilemez.

    %100 Güvenlidir.

    Başlıyoruz Kuruluma Razz

    kn_online DB nizin Query Analizerine Giriyoruz.

    Hashı Oluşturan Fonksiyonumuz.

    Kod:
    CREATE FUNCTION CreateHash(@Data text) /* Author : AKUMA */ RETURNS varbinary(255) BEGIN DECLARE @Hash varbinary (255) SET @Hash = pwdencrypt(@Data) RETURN @Hash END
    Hash Kontrolü Yapan Fonksiyonumuz...

    Kod:
    CREATE FUNCTION CheckHash(@Data text,@Hash varbinary(255)) /* Author : AKUMA */ RETURNS int BEGIN DECLARE @CheckStatus int SET @CheckStatus = pwdcompare(@Data,@Hash) RETURN @CheckStatus END
    Önce TB_USER Tablomuza Şifrelenmiş Şifreleri Binary Olarak Yazacağımız Bir Alan Ekliyoruz...

    Kod:
    ALTER TABLE TB_USER ADD strPasswdBackup varbinary(255) NOT NULL DEFAULT 0;
    Sonrasında Çalıştıracağımız Kod (İşlem Biraz Uzun Sürebilir User Sayısı Hızı Belirler.)

    Kod:
    DECLARE @strAccountID varchar(50),@strPasswd varchar(50),@strPasswdBackup varbinary(255) DECLARE TB_USER CURSOR FOR SELECT strAccountID,strPasswd,strPasswdBackup FROM TB_USER OPEN TB_USER FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup WHILE (@@FETCH_STATUS = 0) BEGIN UPDATE TB_USER SET strPasswdBackup = dbo.CreateHash(@strPasswd) WHERE strAccountID = @strAccountID FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup END CLOSE TB_USER DEALLOCATE TB_USER

    Yukarıdaki Kodu Uyguladığımızda Tüm Şifreler Binary Formatında
    strPasswdBackup a Yazılmış Olduğunu Göreceksiniz, Şimdi Geldik Bunu
    Normal strPasswd ye Çevirmeye TB_USER Tablomuzdaki strPasswd Alanını
    Siliyoruz.

    Kod:
    ALTER TABLE TB_USER DROP COLUMN strPasswd;
    Evet strPasswd yide Sildik, Şimdi strPasswdBackup ın Adını strPasswd ye Çevirelim.

    Kod:
    EXEC sp_rename 'TB_USER.strPasswdBackup', 'strPasswd', 'COLUMN'
    İşlemlerimiz Bitti Şimdi Geldik ACCOUNT_LOGIN de Bunu Nasıl Kontrol Edeceğimize ;
    ACCOUNT_LOGINI Açtığımız da Şöyle Bir Bölüm Göreceksiniz (Şifreyi
    Kontrol Eden Kısım) - (Unutmayınızki ACCOUNT_LOGIN den Hariç Bir LOGIN
    Prosedürünüz Var ise Onada Aynısını Uygulamanız Gerekir.)

    Varolan ACCOUNT_LOGIN

    Kod:
    DECLARE @pwd varchar(13) SET @pwd = null SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID IF @pwd IS null BEGIN SET @nRet = 0 RETURN END ELSE IF @pwd <> @Password BEGIN SET @nRet = 0 RETURN END
    Yeni Şifre Kontrol Kısmı (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)

    Kod:
    DECLARE @pwd varbinary(255) SET @pwd = null SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID IF @pwd IS null BEGIN SET @nRet = 0 RETURN END ELSE IF dbo.CheckHash(@Password,@pwd) <> 1 BEGIN SET @nRet = 0 RETURN END

    Otomatik Üyelik te Kullanacığınız Örnek Kod(Unutmayınızki ACCOUNT_LOGIN
    den Hariç Bir LOGIN Prosedürünüz Var ise Onada Aynısını Uygulamanız
    Gerekir.) - (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)

    Kod:
    -- # Auto Account Start # SELECT @nRet = Count(strAccountId) FROM TB_USER WHERE strAccountId = @AccountID IF @nRet = 0 BEGIN INSERT INTO TB_USER (straccountid, strpasswd, strSocNo, idays) values (@AccountID, dbo.CreateHash(@password), 1, '6') END -- # Auto Account End #
    Hash Şifre Değişimi İçin Procedure(Normal Şifre Gibi Değiştiremezsiniz.)

    Kod:
    CREATE PROCEDURE ACCOUNT_PASSWORD_CHANGE ( @AccountID varchar(50), @Password varchar(50) ) AS /* Author : AKUMA */ BEGIN TRAN DECLARE @AccountStatus tinyint SELECT @AccountStatus = COUNT(strAccountID) FROM TB_USER WHERE strAccountID = @AccountID IF @AccountStatus = 0 BEGIN PRINT RTRIM(LTRIM(@AccountID)) + ' Adında Bir Hesap Bulunamadı.' END ELSE BEGIN UPDATE TB_USER SET strPasswd = dbo.CreateHash(@Password) WHERE strAccountID = @AccountID PRINT RTRIM(LTRIM(@AccountID)) + ' Hesabının Şifresi Değişmiştir.' END COMMIT TRAN
    Şifre Değişim Proceduresinin Kullanımı
    Kod:
    Kullanım : EXEC ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE' Örnek : EXEC ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE'
    Uzman Kullanıcılar İçin Bilgilendirme ;

    Şifreleme ;
    Kod:
    Kullanım : SELECT dbo.CreateHash('ŞİFRE') Örnek : SELECT dbo.CreateHash('123456')
    Şifrenin Doğruluğunu Kontrol Etme ;
    Kod:
    Kullanım : SELECT dbo.CheckHash('Kontrol Edilecek Açık Şifre','Userın Hash Şifresi') Örnek : SELECT dbo.CheckHash('123456',0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0AB49) Bu Değer Sonunda 0 Dönerse Şifre Yanlış, 1 Dönerse Şifre Doğru Demektir.

    alıntıdır..

      Forum Saati Perş. Mart 28, 2024 10:52 am