Makale Özeti

Bu makalede Odyssey Software ‘ in ücretsiz EasyInk Component’ini inceleyerek dijital imzaların nasıl Pocket PC uygulamalarında saklandığını inceleyeceğiz.

Makale

 

EasyInk Kullanarak Dijital İmzaların Oluşturulması :

Bu makalede Odyssey Software ‘ in ücretsiz EasyInk Component’ini inceleyerek dijital imzaların nasıl Pocket PC uygulamalarında saklandığını inceleyeceğiz

Taşınabilir Şirket Uygulamalarında İmzanın önemi :

Taşınabilir cihazlar için oluşturulan şirket uygulamalarında, dataların bildiğimiz “A4” değilde dijital ortamda ya da taşınabilir disklerde taşımak her zaman cazip gelmiştir. Hatta bununla birlikte bir süre sonra şöyle bir ihtiyaç daha karşımıza çıkmıştır : Bu “A4” olarak nitelediğimiz standart kağıtların üzerindeki imzaların dijital ortama taşınması. Bu sorun, akla gelen ilk çözüm ile halledilmeye çalışılıyordu ; dijital ortamda saklanan imzalı dökümanı mobil bir printer yardımıyla print etmek… Fakat zaman ilerledikçe daha farklı bir yapıya doğru eğilim artıyordu ; en azından daha önceleri güvenlik açısından pek kullanılmayan fakat eğilim arttıktan sonra yeni yapıların geliştirilip daha kabul edilebilir hale geldiği bir yapı : Dijital imzanın Dijital bir form aracılığıyla karşı tarafa gönderilmesi. Kısacası imzayı dijital ortamda saklamanın yararları  saymakla bitmez. Neler mi ? İmzanızı kaydedebilir, başka bir yere gönderebilir ve herhangi bir noktada dilediğiniz gibi bu imzayı print edebilirsiniz.

Fakat işin programatik yapısına bakarsak böyle bir sistemi Pocket PC ler üzerinde Standart  Microsoft eMbedded Visual Basic Kontrolleri  ile gerçekleştiremeyiz. PictureBox kullansak ; az önce saydığımız yapıyı oluşturmak o kadarda kolay olmayacaktır. Hatta sadece mouse un saniye saniye koordinatlarını alıp vektörel olarak sisteme çizdirende bir sistem var ; Fakat hepinizinde tahmin ettiği gibi bu o kadarda kolay olmayabilir. E Peki daha kolay nasılmı yapacağız ? İşte Yanıtı :

EasyInk : Dijital İmza için biçilmiş Kaftan :

Odyssey Software oturmuş uğraşmış ve karşımıza bu tip dijital imzalar ya da herhangi bir handwriting (el yazısı) ihtiyacını inanılmaz kolay bir şekilde karşılayan ; ÜCRETSİZ ActiveX kontrolünü oluşturmuş : EasyInk. Bu Microsoft ActiveX kontrolünü hem Pocket PC platformlarında hem de PC lerde kullanabilirsiniz. (Burda dikkat edebileceğiniz bir nokta ise, Bu kontrolün bu iki platformda çalışabilmesinin getirdiği mükemmel bir esneklik olması : “Dataların platformlar arası kopyalanabilmesi.” ) Kafanızda biraz daha iyi canlanabilmesi için şu açıklayıcı örneği verebiliriz : Pocket PC niz üzerinde EasyInk kullanarak dijital imzanızı oluşturdunuz ; sıra geldi bunu diğer bir platform olan PC platformuna geçirmek. Çünkü ordada sizi dijital ortamda imzalanmayı bekleyene dökümanlar var. Pocket PC nizin Wireless (Kablosuz) bağlantısı üzerinden bunu PC nize gönderiyor ; PC niz üzerindeki Dökümana yine EasyInk I kullanarak dijital imzanızı ekliyorsunuz. Ne kadar güzel değil mi ? Peki aklımıza şu soruda gelebilir ? Madem bu iki platform arasında data transferi yapabiliyoruz acaba Kullanılan dosya formatı nedir ? Tahmin edin ? (Bitmap) Küçük imzalar için bu bitmap dosyaları o kadar hafifki yukarıda verilen Vektör sistemi ile karşılaştırıldığında gözle görülür bir performans farkı yaşanıyor.

EasyInk Örnek Uygulama :

Sıra geldi küçük bir örnek uygulama oluşturarak EasyInk in nasıl çalıştığını anlatmaya. Microsoft eMbedded Visual Basic kontrolleri kullanılarak (ve tabiki EasyInk) standart bir form üzerine aşağıdaki görünümü oluşturduk.

Form Görünümü

EasyInk in formun hangi kısmında olduğunu bulamıyan var mı ? Tabiki tırtıklı, Write Your Signature (İmzanızı Yazınız) etikenin altındaki dikdörtgen kısım. EasyInk bölgesine Pocket PC Kalemimizi kullanarak imzamızı atıyoruz. Silmek ise bundan çok daha kolay. Clear (Sil) butonuna basarak bu işi hemen halledebiliyoruz.

Madem Clear I açıkladık diğer button larında ne işe yaradığını kısaca açıklayalım. Hepinizinde tahmin ettiği gibi İmzanızı bir BMP dosyası olarak sisteme kaydetmek için Save Bitmap ve yine tabiki hali hazırda kaydedilmiş bir imzayı sisteme yüklemek için Load Bitmap butonları sisteme yerleştirilmiş. Ve ayrıca çok daha heyecan verici bir sistemle daha karşılaşabiliyoruz. İmzanızı Binary Formatında Save Data butonuna basarak kaydedebilir ve tahmin ettiğiniz gibi Open Data butonuna basarak bu datayı geri getirebilirsiniz. Bunun neresi heyecan verici diyenler olabilir hemen gerçek bir senaryo üzerinden kısaca açıklayalım : Veritabanları üzerinde binary formatında imajların tutulduğunu mutlaka en azından bir kere duymuşuzdur. (Sanırım ne işe yaradığı tahmin edildi) Evet yanlış tahmin etmiyorsunuz, eğer doğru sistemi kurabilirseniz Dünyanın herhangi bir yerindeki bir veritabanında bu datayı Binary formatında tutabilip aynı zamanda tekrar gerisinigeri çağırabilirsiniz ! Ve son olarak imzanızı sistemin Memory (Hafıza) sinde bir değişkene atabilirsiniz. Bu ne işe yarar diyenler için hemen açıklayalım : Uygulamanızdaki formlar arasında imzanızı rahatlıkla taşıyabilirsiniz. Örneğimizde bu kısım için tabiki iki adet button kullanışmış. Bunlardan imzayı Memory ye kaydeden Save to Variable ve geri getiren Get From Variable.

Birazda Kod Yazalım :

İşe kolay olanlarıyla başlayalım : Save To Variable

Private paImageData
Private Sub cmdSaveVar_Click()
  paImageData = EasyInk.ImageData
End Sub

Örnekte görüldüğü gibi form seviyesinde paImageData isminde private bir değişken tanımladık. (Variant) Ve data olarak EasyInk kontrolünün ImageData property sini assign ettik. Güzel , datayı sakladık peki geri nasıl alacağız : İşte Get From Variable

Private Sub cmdOpenVar_Click()
  EasyInk.ImageData = paImageData
End Sub

İşte bu kadar. Data yı değişkende saklamanın faydasını herhalde anlatmaya gerek yok.Datayı uygulamanızın diğer formlarına ; Class ve Modüllerine ve en güzeli diğer platformlara geçirmek tahmin ettiğiniz gibi çok kolay olması gerek ; değilmi ? Ama daha bitmedi :

Silmek ise standart seviyede programlama bilen bir kişinin rahatlıkla yapabileceği düzeyde bis sistem. İşte Clear buttonu :

Private Sub cmdClear_Click()
  EasyInk.Clear
End Sub  

Soranlar olabilir acaba İmzayı Bitmap ta nasıl tutacağız : İşte Cevabı (Save Bitmap)

Private Sub cmdSaveBitmap_Click()
  ' Dosya adı alınır.
  Dialog.DialogTitle = "Dosya adı seçiniz :"
  Dialog.Filter = "Bitmaps Images|*.bmp"
  Dialog.FilterIndex = 1
  Dialog.Flags = cdlOFNLongNames Or cdlOFNPathMustExist _
                 Or cdlOFNOverwritePrompt
  Dialog.CancelError = True
  On Error Resume Next
  Err.Clear
  Dialog.ShowSave
  If Err.Number <> 0 Then Exit Sub
  On Error GoTo 0
  ' Dosyayı Kaydet
  EasyInk.SaveImage Dialog.FileName
End Sub

Örneğimizde CommonDialog kontrolü üzerinden kullanıcıdan dosya adı istendi. Ve EasyInk kontrolünün SaveImage metodu üzerinden çok basit bir şekilde imajı sisteme Bitmap formatında kaydettik. (Bitmap in faydalarını anlatmaya gerek yok sanırım)

E birde bunun tersi olan Open Bitmap (Dosyayı Aç) sistemini anlatalım :

Private Sub cmdOpenBitmap_Click()
  ' Dosya Adı Al
  Dialog.DialogTitle = "Dosya adı seçiniz :"
  Dialog.Filter = "Bitmaps Images|*.bmp"
  Dialog.FilterIndex = 1
  Dialog.Flags = cdlOFNLongNames
  'Dialog.FileName = "İmza"
  Dialog.CancelError = True
  On Error Resume Next
  Err.Clear
  Dialog.ShowOpen
  If Err.Number <> 0 Then Exit Sub
  On Error GoTo 0
  EasyInk.LoadImage Dialog.FileName
End Sub

Yine çok basit bir sistem üzerinden ; CommonDialog kullanarak kullanıcıdan dosya adı istendi ve EasyInk nesnesinin LoadImage metodu üzerinden datalar geri yüklendi. Ne kadar basit değil mi ?

Genel olarak ilk örnek üzerinden konuşmak gerekirse bence en ilginç nokta EasyInk nesnesinin ImageData property si. Bu sayede datanızı uygulama içerisinde bir değişken üzerinden rahatlıkka taşıyabilirsiniz. Peki bu yapı sadece uygulama içerisinde data taşımak içinmi ? Tabiki hayır. Hemen inceleyelim : Save Data

Private Sub cmdSaveData_Click()
  Dim loFile As File
  Dim laImageData As Variant
  Dim lsImageData As String
  Dim i As Integer
  ' Dosya Adı Al
  Dialog.DialogTitle = "Kaydedilecek dosya adını seçiniz :"
  Dialog.Filter = "Binary|*.bin"
  Dialog.FilterIndex = 1
  Dialog.Flags = cdlOFNLongNames Or cdlOFNPathMustExist _
                 Or cdlOFNOverwritePrompt
  Dialog.CancelError = True
  On Error Resume Next
  Err.Clear
  Dialog.ShowSave
  If Err.Number <> 0 Then Exit Sub
  On Error GoTo 0
  ' Dosyayı Oluştur
  Set loFile = CreateObject("FileCtl.File")
  ' Write file
  loFile.Open Dialog.FileName, fsModeOutput, fsAccessWrite
  laImageData = EasyInk.ImageData
  For i = 1 To LenB(laImageData)
    lsImageData = lsImageData & Chr(AscB(MidB(laImageData, i, 1)))
  Next 'i
  loFile.LinePrint lsImageData
  loFile.Close
End Sub

Daha önceleri olduğu gibi bu örneğimizde de CommonDialog üzerinden kullanıcıdan dosya adı istedik. Ve FileSystem kontrolü üzerinden (ve tabiki onun File objesi) standart bir metin dosyası açtık. Nedeni ise ImageData property sinin Bir Byte() array olması ve bizim bu byte ları dosyaya kaydetmeden önce tek tek string (metin) tipine dönüştürmemizin gerekmesi. Bütün işlemler bittikten sonra metin datasını kaydettik ve işimizi bitirdik.

Peki bu datayı geri nasılmı çağıracağız ? İşte Open Data :

Private Sub cmdOpenData_Click()
  Dim loFile As File
  Dim laImageData As Variant
  ' Dosya adını al
  Dialog.DialogTitle = "İmaj dosyasını seçiniz"
  Dialog.Filter = "Binary|*.bin"
  Dialog.FilterIndex = 1
  Dialog.Flags = cdlOFNLongNames
  'Dialog.FileName = "İmza"
  Dialog.CancelError = True
  On Error Resume Next
  Err.Clear
  Dialog.ShowOpen
  If Err.Number <> 0 Then Exit Sub
  On Error GoTo 0
  ' Create object
  Set loFile = CreateObject("FileCtl.File")
  ' Dosyaya yaz
  loFile.Open Dialog.FileName, fsModeInput, fsAccessRead
  laImageData = loFile.InputB(loFile.LOF — 2)
  EasyInk.ImageData = laImageData
  loFile.Close
End Sub

Dosya adını aldıktan sonra yine CommonDialog kullanarak dosyayı basit bir biçimde açtık ; datayı okuduk ve sonucu EasyInk nesnesinin ImageData property sine assign ettik. Fakat dikkat ederseniz datanın son iki karakterini çıkardık. Nedeni ise bir önceki kaydetme işleminde File nesnesinin LinePrint metodunun bu datanın bir image data sı olduğunu belirten 2 karakter eklemesi.

 Ve son olarak ; daha önce bahsettiğimiz gibi bu datayı veritabanınızda da rahatlıkla saklayabilirsiniz . Tek yapmanız gereken bu datayı saklayacağınız kolonun data tipini Binary olarak ayarlamanız. İşte Bu kadar !

Her şey bittimi ? Hayır ! Biraz daha bilgi :

Yukarıda gördüğünüz gibi datamızı Variant tipindeki bir değişkene rahatlıkla kaydedebildik. Peki bunun ne gibi faydaları olabilir ? Sizlere şöyle bir soru sormak istiyorum : Mutlaka her birimiz en azından bir kere MSN Messenger I kullanmışızdır. Peki MSN in hadwriting özelliği hangi sistem üzerinden çalışıyor bir tahmin edin bakalım ? Evet doğru cevap ! Bu variant tipindeki datayı bir remoting teknolojisi üzerinden başka bir sisteme kolaylıkla aktarabilirsiniz ; peki hangi remoting teknolojisi diye soranlar olabilir hemen cevaplayalım : Odyssey Software bu ihtiyacıda düşünmüş ve iki tane sistem geliştirmiş : Cefusion veya  ViaXML.

Sonuç :

EasyInk kullanarak dijital imza & el yazısı gibi ihtiyaçlarınızı çok esnek bir sistem üzerinden sisteminizde saklayabilir ; başka sistemlere gönderebilir ve bu konudaki diğer tüm ihtiyaçlarınızı karşılayabilirsiniz.

Başka bir Teknoloji makalesinde daha görüşmek üzere !

İyi Çalışmalar

Ekin ÖZÇİÇEKÇİLER

Kaynak : MSDN