ASP.NET MS Sql Server Asymmetric Key RSA_2048 Kullanımı 1

Bugünkü yazımızda MS SQL Server 2005 Express Edition ile Asymmetric Key kullanarak bazı alanlarımızı dışardan yetkisiz erişime karşı koruycaz.Bunun için
örnek uygulamamızda basit bir seneryo düşündüm ve ufak bir kayıt sistemi oluşturdum.Uygulamada kullanıcıdan kayıt oluşturma esnasında iki adet bilgi alıyoruz.Bir tanesi kullanıcı adı ve biz bu bilgiyi Stored Procedure ile parametre olarak gönderip hiçbir işlem yapmadan normal girilen değerlerle kaydını yapıyoruz.Diğeri ise şifre bilgisi ve biz bunuda kullanıcıdan alıp Stored Procedure üzerinden parametresiyle gönderip sql server da Encrypt edip kaydediyoruz.

Örnek tablomuzda birde otomatik artan alan var bunun için kullanıcıdan herhangi bir bilgi almamıza gerek yok.Bu alanın bir özelliğide Primary Key olması.İleride güncelleme işlemi yaptığımızda böyle bir alana ihtiyaç duyucaz o yüzden benzersiz bir alan olması gerekiyor.
İlk önce örnek tablomuzu oluşturalım.Aşağıdaki sorguyu kopyalayıp Query den çalıştıralım.

[code:tsql]
CREATE TABLE Kullanicilar(
 [ID] [int] IDENTITY(1,1) NOT NULL,
 [KullaniciAdi] [nvarchar](50) NULL,
 [Sifre] [varbinary](max) NULL
)
[/code]

Şimdi sıra geldi örneğimizde encrypt yapabilmemiz için gerekli olan asymmetric key oluşturmaya.
Aşağıdaki bloğu gene query den çalıştıralım.Toplamda 3 parametresi var.Bunları kısaca açıklarsak
 
1. AsimetrikKeyim - buna istediğiniz ismi verebilirsiniz.
2. RSA_2048 - kullanılan algoritma tipi
3. sifrem - ileride lazım olacak olan şifre.

CREATE ASYMMETRIC KEY AsimetrikKeyim
    WITH ALGORITHM = RSA_2048
    ENCRYPTION BY PASSWORD = 'sifrem';
GO

Sorgumuzu çalıştırdıktan sonra Object Explorer dan kullandığınız veritabanınıza tıklayın.Oradan Security e son olarak Asymmetric Keys e. Asimetric Key'in AsimetrikKeyim  ismiyle var olduğunu göreceksiniz.

Yapacağımız ilk işlem kayıt ekleme olacağından ilk önce onun Stored Procedure ünü yazacağız.Gene aşağıdaki sorguyu query den execute edelim.Aşağıdaki saklı yordamda dikkat edilirse EncryptByAsymKey(AsymKey_ID('?'), @Sifre) soru işareti ile belirtiğim noktada ASYMMETRIC KEY in ismi var.Encrypt yapılcak alanında EncryptByAsymKey(AsymKey_ID('AsimetrikKeyim'), ?) soru işareti ile belirttiğim sifre alanının olduğunu görüceksiniz.Sorgumuzu yazıp çalıştıralım.

CREATE PROCEDURE spUyeEkle
@ID int OUTPUT,
@Sifre NVARCHAR(MAX),
@KullaniciAdi NVARCHAR(50)
AS
INSERT INTO Kullanicilar (KullaniciAdi, Sifre)
VALUES (
 @KullaniciAdi,
 EncryptByAsymKey(AsymKey_ID('AsimetrikKeyim'), @Sifre)
);
SET @ID = @@IDENTITY

Web projemize bir adet konfigurasyon dosyası (web.config) ekleyelim ve oluşturulan dosyaya aşağıdaki satırları koyalım.Bağlamtim ismi ile asp.net sayfası üzerinden kendisine erişeceğiz.

using System.Data.SqlClient;
using System.Data;

Şimdi hemen hemen herşey bitti sadece kayıt yapmamız için gereken kodları yazmamız gerekicek.Aşağıdaki kodu butonun Click olayına yazalım.

SqlConnection SqlBaglantim = new SqlConnection(ConfigurationManager.ConnectionStrings["baglantim"].ConnectionString);
SqlCommand sqlcmd = new SqlCommand("spUyeEkle", SqlBaglantim);
sqlcmd.CommandType = CommandType.StoredProcedure;
sqlcmd.Parameters.Add(new SqlParameter("@KullaniciAdi", SqlDbType.NVarChar, 50));
sqlcmd.Parameters["@KullaniciAdi"].Value = TextBox1.Text;
sqlcmd.Parameters.Add(new SqlParameter("@Sifre", SqlDbType.NVarChar, 50));
sqlcmd.Parameters["@Sifre"].Value = TextBox2.Text;//Encrypt dilcek parametre değerini alıyoruz
//Bu parametreye değeri SQL Server vericeğinden biz vermiyoruz aşağıdaki şekilde gösteriyoruz.
sqlcmd.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 4));
sqlcmd.Parameters["@ID"].Direction = ParameterDirection.Output;
SqlBaglantim.Open();
sqlcmd.ExecuteNonQuery();
SqlBaglantim.Close();

Son olarak uygulamamızı çalıştıralım ve test edelim.Sayfamız ilk çalıştığında görüntü aşağıdaki gibi olucak.

Form üzerinden aşağıda görüldüğü gibi bir kayıt girelim.

SQL IDE sinde aşağıdaki sorguyu çalıştıralım.

SELECT * FROM Kullanicilar

Encrypt uyguladığımız Sifre alanına 123456 olarak girdiğimiz değerin yukarıda yazdığımız  sorgu ile verdiği sonuca bir bakalım.

0xE10173C43BF06CD4F984E46E964D88E730DB384C7D0BE3EE2A3FC3C8854C076E5BC38262
D5397D79DE4CD3C988975F282BE0415EFA992828D29AA4A3DC331D75D2A9DB4501D5FC6EA
E87DAD6C7CB85D8377B5CCD9FB20A5B921983FBD90AC96F6C349D9D983AC23280DEB4715
CDC0D840F340FB91BED1C47D919C6D2992F10AC8FADD794AFDAEF68EE210BE97BDFA37322
731B761579454A4D7D4272FFB6431650065E98D258F612A06150948008540BE862C98B2D8A6A
184823843AB39471E4BCD36A6C83818B15BC9AF3BECC3BD6D3FFEB2D608EED8D336BF0B304
67507514445E7AC7FEFF8FEC8D139CCDCF315E1AB4F5BE809BD9335CF5BE4113980B76B8

İlerki yazımızda Encrypt uyguladığımız alanlarda select,update işlemleri yapıcaz.
Hepinize kolay gelsin

Bu yazıyı ilk değerlendiren siz olun

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Gönderen : Admin
Gönderilme Zamanı: 23.04.2008 at 14:12
Tags: , , ,
Categories: Asp.NET | MS SQL
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Yorumlar (0) | Post RSSRSS comment feed
 
 

İlişkili yazılar

Yorum ekle


(Gravatar simgesini gösterecek)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Canlı önizleme

06 Ocak 2009 Salı 17:04