AutoIt/Szyfrowanie danych

Z Wikibooks, biblioteki wolnych podręczników.

_Crypt_Startup[edytuj]

#include <Crypt.au3>
_Crypt_Startup ( )

Funkcja inicjalizuje UDF. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd (makro @error przyjmuje wartość: 1 - błąd otwarcia Advapi32.dll, 2 - nie udało się pozyskać kontekstu do Crypt).

UWAGA: - wywołanie tej funkcji nie jest konieczne, ale zalecane ze względu na optymalizację wydajności.


_Crypt_Shutdown[edytuj]

#include <Crypt.au3>
_Crypt_Shutdown ( )

Wywołanie tej funkcji jest potrzebne tylko wtedy, gdy została wywołana funkcja _Crypt_Startup(). Funkcja nie zwraca żadnej wartości.


_Crypt_EncryptData[edytuj]

#include <Crypt.au3>
_Crypt_EncryptData ( $vData, $vCryptKey, $iAlgID [, $bFinal = True] )

Funkcja szyfruje dane określonym algorytmem za pomocą podanego klucza. Zwraca łańcuch binarny zawierający zaszyfrowane dane. Jeżeli wystąpił błąd to zwracane jest -1, a makro @error przyjmuje wartość różną od zera (100+ nie można utworzyć klucza, 20 nie można utworzyć bufora, 30 nie można zaszyfrować danych).

$vData - dane do zaszyfrowania

$vCryptKey klucz szyfrujący lub uchwyt do niego (gdy ustawiona jest flaga CALG_USERKEY)

$iAlgID - flaga algorytmu szyfrowania

$CALG_MD2 = 0x00008001

$CALG_MD4 = 0x00008002

$CALG_MD5 = 0x00008003

$CALG_SHA1 = 0x00008004

$CALG_3DES = 0x00006603

$CALG_AES_128 = 0x0000660e

$CALG_AES_192 = 0x0000660f

$CALG_AES_256 = 0x00006610

$CALG_DES = 0x00006601

$CALG_RC2 = 0x00006602

$CALG_RC4 = 0x00006801

$CALG_USERKEY = 0

$bFinal - (opcjonalnia), FALSE jezeli szyfrowany jest fragment pełnych danych

UWAGA: Niezależnie od typu danych wejściowych, zawsze zwracany jest łańcuch binarny.


_Crypt_EncryptFile[edytuj]

#include <Crypt.au3>
_Crypt_EncryptFile ( $sSourceFile, $sDestinationFile, $vCryptKey, $iAlgID )

Funkcja szyfruje plik określonym algorytmem za pomocą podanego klucza. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd. Jeżeli wystąpił błąd to zwracane jest -1, a makro @error przyjmuje wartość różną od zera (10+ nie można utworzyć klucza, 2 błąd przy otwieraniu pliku źródłowego, 3 błąd przy otwieraniu pliku wynikowego, 20 nie można utworzyć bufora).

$sSourceFile - plik do zaszyfrowania

$sDestinationFile - plik wynikowy (zaszyfrowany)

$vCryptKey klucz szyfrujący lub uchwyt do niego (gdy ustawiona jest flaga CALG_USERKEY)

$iAlgID - flaga algorytmu szyfrowania (jak dla_Crypt_EncryptData)

UWAGA: Plik źródłowy może być większa niż pliku wynikowy, w zależności od przyjętego algorytmu szyfrowania.


_Crypt_DecryptData[edytuj]

#include <Crypt.au3>
_Crypt_DecryptData ( $vData, $vCryptKey, $iAlgID [, $bFinal = True] )

Funkcja odszyfrowuje dane za pomocą podanego klucza klucza. Zwraca odszyfrowane dane w postaci łańcucha binarnego. Jeżeli wystąpił błąd makro @error przyjmuje wartość różną od zera (100+ - nie można utworzyć klucza, 20 - nie udało się odszyfrować danych).

$vData - dane do odszyfrowania

$vCryptKey klucz użyty do zaszyfrowania danych lub uchwyt do niego (gdy ustawiona jest flaga CALG_USERKEY)

$iAlgID - flaga algorytmu użytego do szyfrowania (jak dla_Crypt_EncryptData)

$bFinal - (opcjonalnia), FALSE jezeli szyfrowany jest fragment pełnych danych

UWAGA: Zwracany jest zawsze łańcuch binarny, nawet gdy zaszyfrowane dane były tekstem. W tym wypadku należy użyć funkcji BinaryToString().

Przykład:

 
#include <Crypt.au3>

Dim $sPas = "AutoIt" ;kod szyfrujący

;tekst do zaszyfrowania
$sText = "UWAGA: Bardzo tajny tekst do zaszyfrowania!!!"
$sText &= @LF & "A to jego drugi wiersz."

_Crypt_Startup()  ;inicjalizacja biblioteki Crypt

$bEnCrypt = _Crypt_EncryptData($sText, $sPas, $CALG_RC4)  ;szyfrowanie tekstu algorytmem RC4

$bDeCrypt = _Crypt_DecryptData($bEnCrypt, $sPas, $CALG_RC4)  ;odszyfrowanie danych
$sDeCrypt = BinaryToString($bDeCrypt)  ;zamiana łańcucha binarnego (będącego wynikiem odszyfrowania) na tekst

;formatowanie wyników
$sRes = "Tekst do zaszyfrowania: " & @LF & $sText & @LF & @LF
$sRes &= "Klucz szyfrujący: " & $sPas & @LF
$sRes &= "Wynik szyfrowania: " & $bEnCrypt & @LF & @LF
$sRes &= "Tekst odszyfrowany: " & @LF & $sDeCrypt

MsgBox(64, "Test szyfrowania:", $sRes)  ;wyświetlenie wyników działania skryptu

_Crypt_Shutdown()  ;zamknięcie biblioteki Crypt


_Crypt_DecryptFile[edytuj]

#include <Crypt.au3>
_Crypt_DecryptFile ( $sSourceFile, $sDestinationFile, $vCryptKey, $iAlgID )

Funkcja odszyfruje plik określonym algorytmem za pomocą podanego klucza. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd. Jeżeli wystąpił błąd to zwracane jest -1, a makro @error przyjmuje wartość różną od zera (10+ nie można utworzyć klucza, 2 błąd przy otwieraniu pliku źródłowego, 3 błąd przy otwieraniu pliku wynikowego).

$sSourceFile - plik zaszyfrowany

$sDestinationFile - plik wynikowy (odszyfrowany)

$vCryptKey klucz szyfrujący lub uchwyt do niego (gdy ustawiona jest flaga CALG_USERKEY)

$iAlgID - flaga algorytmu szyfrowania (jak dla_Crypt_EncryptData)


_Crypt_HashData[edytuj]

#include <Crypt.au3>
_Crypt_HashData ( $vData, $iAlgID [, $bFinal = True [, $hCryptHash = 0]] )

Funkcja haszuje dane określonym algorytmem. Zwraca skrót do danych lub obiekt Hash (jeżeli ustawione było $bFinal = False). Jeżeli wystąpił błąd zwracane jest -1, a makro @error przyjmuje wartość różną od zera (10 - nie można utworzyć obiektu Hash, 20 - nie można zaszyfrować danych, 30 - nie można uzyskać wielkości skrótu, 40 - nie udało się uzyskać skrótu).

$vData - dane do haszowania

$iAlgID - flaga algorytmu haszowania

$CALG_MD2 = 0x00008001

$CALG_MD4 = 0x00008002

$CALG_MD5 = 0x00008003

$CALG_SHA1 = 0x00008004

$bFinal - False, jeśli jest to tylko segment pełnych danych, a także sprawia, że funkcja zwraca obiekt Hash, zamiast skrótu danych.

$hCryptHash - Hash obiekt zwrócony z poprzedniego wywołania funkcji CryptHashData()


Tworzenie skrótów (haszowanie) to funkcja kryptograficzna, na wyjściu której otrzymuje się wartość skompresowaną jednoznacznie reprezentującą pełną wiadomość, tzn. że algorytm funkcji skrótu wykonywany na identycznej wiadomości, za każdym razem daje ten sam wynik. W praktyce wykonanie skrótów dla różnych komunikatów nie powinno dać tego samego wyniku (prawdopodobieństwo zaistnienia takiego zdarzenia - nazywanego kolizją - jest niewielkie). Ponadto, jeżeli ktoś dysponuje jedynie skrótem, to nie powinien mieć możliwości łatwego przekształcenia go w oryginalną wiadomość. Unikatowość skrótów sprawia, że są one używane w systemach uwierzytelniania, zapewniania integralności danych i w podpisach cyfrowych.

1. Sprawdzenie integralności danych - haszujemy dane i jeżeli skrót nie uległ zmianie, to w zasadzie mamy pewność, że dane nie zostały zmienione.

2. Uwierzytelnianie haseł - w momencie rejestracji hasło jest haszowane i na serwerze przechowywany jest tylko skrót, a nie hasło w wersji oryginalnej. W czasie logowania hasło jest haszowane, a otrzymany skrót jest porównywany ze skrótem przechowywanym w bazie serwera. Jeżeli skróty się zgadzają, to mamy pewność, że wprowadzone hasło było prawidłowe. Dzięki takiej procedurze wykradzenie haseł (a właściwie ich skrótów - bo tyko one są przechowywane) z serwera nic nie daje, gdyż na podstawie skrótów w zasadzie nie można odtworzyć oryginalnej postaci haseł (funkcja haszująca jest jednokierunkowa).


_Crypt_HashFile[edytuj]

#include <Crypt.au3>
_Crypt_HashFile ( $sFilePath, $iAlgID )

Funkcja haszuje plik o podanej ścieżce dostępu i nazwie. Zwraca skrót do pliku lub obiekt Hash (jeżeli ustawione było $bFinal = False). Jeżeli wystąpił błąd zwracane jest -1, a makro @error przyjmuje wartość różną od zera (1 - nie można odczytać pliku).

$sFilePath - ścieżka dostępu i nazwa pliku do haszowania

$iAlgID - flaga algorytmu haszowania, jak dla _Crypt_HashData


_Crypt_DeriveKey[edytuj]

#include <Crypt.au3>
_Crypt_DeriveKey ( $vPassword, $iAlgID [, $iHashAlgID = $CALG_MD5] )

Funkcja tworzy klucz szyfrujący na podstawie podanego hasła i z użyciem określonego algorytmu. Zwraca uchwyt do wygenerowanego klucza, lub -1 gdy wystąpił błąd (makro @error przyjmuje wartość: 10 - nie można utworzyć obiektu Hash, 20 - nie udało się zahaszować hasła, 30 - 3ie udało się wygenerować klucza).

$vPassword - hasło do użycia w generowaniu klucza

$iAlgID - flaga algorytmu szyfrowania

$iHashAlgID - flaga algorytmu haszowania hasła


_Crypt_DestroyKey[edytuj]

#include <Crypt.au3>
_Crypt_DestroyKey ( $hCryptKey )

Funkcja likwiduje klucz i zwalnia zasoby zajmowane przez niego. Zwraca TRUE gdy sukces, lub -1 gdy wystąpił błąd (@error=10 - nie można usunąć klucza).

$hCryptKey - uchwyt do likwidowanego klucza

Przykład:

#include <Crypt.au3>

Dim $sPassword = "1234"  ;hasło do szyfrowania
Dim $sText = "Bardzo tajna informacja!"  ;dane do zaszyfrowania

$hKey = _Crypt_DeriveKey($sPassword, $CALG_RC4) ;uchwyt do klucza szyfrującego utworzonego z hasła za pomocą algorytmu RC4


$bEnCrypt = _Crypt_EncryptData($sText, $hKey, $CALG_USERKEY)  ;szyfrowanie tekstu algorytmem RC4

$bDeCrypt = _Crypt_DecryptData($bEnCrypt, $hKey, $CALG_USERKEY)  ;odszyfrowanie danych
$sDeCrypt = BinaryToString($bDeCrypt)  ;zamiana łańcucha binarnego (będącego wynikiem odszyfrowania) na tekst

;formatowanie wyników
$sRes = "Tekst do zaszyfrowania: " & @LF & $sText & @LF & @LF
$sRes &= "Hasło: " & $sPassword & @LF
$sRes &= "Uchwyt do klucza szyfrującego: " & $hKey & @LF
$sRes &= "Wynik szyfrowania: " & $bEnCrypt & @LF & @LF
$sRes &= "Tekst odszyfrowany: " & @LF & $sDeCrypt

MsgBox(64, "Test szyfrowania z tworzeniem zaszyfrowanego klucza:", $sRes)  ;wyświetlenie wyników działania skryptu

 _Crypt_DestroyKey($hKey)  ;likwidacja klucza


_Crypt_GenRandom[edytuj]

#include <Crypt.au3>
_Crypt_GenRandom ( $pBuffer, $iSize )

Funkcja generuje losowe dane o określonej długości i umieszcza je w buforze o zadanym adresie. Zwraca TRUE gdy sukces, lub FALSE gdy wystąpił błąd (makro @error przyjmuje wartość różną od zera).

$pBuffer - wskaźnik do bufora, w którym mają być umieszczone wygenerowane dane

$iSize - wielkość bufora co jest jednoznaczne z wielkością wygenerowanych danych

Dane uzyskane za pomocą funkcji _Crypt_GenRandom są bardziej losowe od tych uzyskanych typowym generatorem liczb losowych.

Można je wykorzystać do tworzenia losowych kluczy kryptograficznych.

Przykład:

#include <Crypt.au3>

Dim $iLenData = 16  ;deklarowana wielkość generowanych danych losowych w bajtach

$tBuffor = DllStructCreate("byte[" & $iLenData & "]") ;tworzenie bufora (w postaci struktury) i odczyt wskaźnika do niego

_Crypt_GenRandom($tBuffor, DllStructGetSize($tBuffor))  ;tworzenie losowych danych i umieszczenie ich w buforze

$bRandomData = DllStructGetData($tBuffor, 1)  ;odczyt losowych danych z bufora

MsgBox(64, "Losowe dane:", $bRandomData)