Dnia 02.02.2012 o 15:18 kwapek <
kwa...@poczta.onet.pl> napisał(a):
> Witam,
>
> mam pytanie do szanownych grupowiczów, czy ktoś może już walczył z
> podpisywaniem danych podpisem elektronicznym z poziomu programu w
> delphi.
>
> Potrzebuję dwie sprawy :
> 1. podpisanie zawartości recordu w bazie (np. dane mogą być zapisane
> jako XML w osobnym pliku i podpisane lub też jakiś inny sposób)
> 2. logowanie do programu przy użyciu podpisu kwalifikowanego.
>
> Muszę zaimplementować takie funkcjonalności w programie i nie bardzo
> wiem jak to ugryźć.
Takie coś realizuje się w następujący sposób. Przygotowuje Pan klucz
prywatny i publiczny. Nie muszę chyba dodawać, że tylko jeden powinien być
osadzony w programie. Drugim krokiem jest wykonanie skrótu danych; za
mojej wiedzy obecnie za bezpieczny algorytm uważa się sha1, ale to już
proszę sprawdzić samemu, mogę się mylić. Hashet następnie jest szyfrowany
kluczem prywatnym i umieszczany z danymi. Weryfikacja jest prosta:
wykonujemy ponownie hashet danych, rozszyfrowujemy zapamiętany wcześniej
podpis kluczem publicznym i porównujemy hashety. Jeśli nie są zgodne, to
znaczy, że ktoś mieszał w danych.
Jeśli chodzi o algorytmikę, to z pomocą przychodzi tu sam system
operacyjny. Bodaj od 2000 wzwyż zawiera on cały interface pozwalający na
szyfrowanie, deszyfrowanie i hashowanie danych. Proszę poczytać tutaj:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa375538(v=vs.85).aspx
W .NET - jak zauważył kolega - jest to bardzo łatwe, bo wystarczy
skorzystać z, bodaj, System.Security.Cryptography. Nie wiem, czy rtl
Delphi zawiera już opakowanie CryptoAPI, ale nawet jeśli nie, to zapewne
ktoś zdążył już przepisać odpowiednie nagłówki. Jeśli wpisze Pan
'CryptoAPI Delphi' w Google, pojawia się sporo artykułów, proszę już
poszperać samemu :)
Pozdrawiam -- Spook.
--
! ._______. Warning: Lucida Console sig! //) !
! || spk ||
www.spook.freshsite.pl / _ """*!
! ||_____|| spook at
op.pl / ' | ""!
! | ___ | tlen: spoko_ws gg:1290136 /. __/"\ '!
! |_|[]_|_| May the SOURCE be with you! \/) \ !