Generowanie funkcji skrótu (HashLib4Pascal)

0

Nowoczesne Delphi udostępniają bardzo przydatny moduł do generowania funkcji skrótu - System.Hash
Obsługiwane są podstawowe funkcje (MD5/SHA1/SHA2/Jenkins)... Ale, na rynku jest sporo innych algorytmów. Między innymi SHA-3.

Większość z nich obsługiwane są w bibliotece HashLib4Pascal.
Przeznaczona jest dla Delphi i Lazarusa. Mimo, że dostępny jest kod źródłowy nie mam pojęcia jak skorzystać z dobrodziejstw wyżej wymienionej biblioteki.

Np: HashLib4Pascal\HashLib\Crypto\HlpSHA3.pas
Jak wygenerować hash dla pliku oraz dla danego ciągu znaków?

Czy ktoś z Was używa i może podzielić się jak w najprostszy sposób użyć tej biblioteki?

Edit: Coś znalazłem tutaj: https://forum.lazarus.freepascal.org/index.php?topic=33536.0

-Pawel

1

No sha2 można do hashowania haseł użyć, no widzę pascal dołączył do nowoczesnych języków, mam nadzieję, że błędów nie zrobili, bo algorytmy hashujące są trudne do zrozumienia.

Anyway jakby ktoś chciał zrozumieć jak zrobić jakąkolwiek funkcję hashującą lub algorytm to polecam sprawdzić jak to jest zrobione w arduino bez zbędnych fabryk class i innych pierduł tylko czysty kod.

1
Wypierdzistyy napisał(a):

No sha2 można do hashowania haseł użyć, no widzę pascal dołączył do nowoczesnych języków, mam nadzieję, że błędów nie zrobili, bo algorytmy hashujące są trudne do zrozumienia.

Co to znaczy „widzę pascal dołączył do nowoczesnych języków”? Ta biblioteka ma 5 lat, a są jeszcze inne, nawet znacznie starsze, więc gratuluję spostrzegawczości. W ogóle ten akapit to jakiś WTF, wypełniony uprzedzeniami i deprecjonujący Delphi/Pascala.

Anyway jakby ktoś chciał zrozumieć jak zrobić jakąkolwiek funkcję hashującą lub algorytm to polecam sprawdzić jak to jest zrobione w arduino bez zbędnych fabryk class i innych pierduł tylko czysty kod.

Zaznaczę przy okazji, żeby kogoś nie podkusiło implementować takich funkcji samodzielnie. Właśnie dlatego — jak w pierwszym akapicie cytowanego posta zauważył autor — że są skomplikowane. Nie po to ktoś odwalił całą robotę za nas, aby wymyślać koła na nowo. Jeśli ktoś nie lubi klas i pierdÓł, to może sobie kod z pascalowej biblioteki skopiować do zwykłej funkcji.

W tym przypadku warto to zrobić, bo wywołania pokroju tego:

THashFactory.TCrypto.CreateSHA1().ComputeString(Edit1.Text, TEncoding.UTF8).ToString();

to jakiś turbo-WTF składniowy. Nie rozumiem jak można wziąć tak prosty mechanizm jakim jest funkcja, i do tego stopnia sp******ić jego obsługę. No ale rozumiem, że dla geniuszy OOP funkcja nazywająca się np. CreateHashSHA1 (albo CreateHashSHA1FromString) jest bezużyteczna, nic nie mówi o tym co robi i nie da się jej używać. :D

1

Pisanie algorytmu typu funkcja skrótu zostawmy matematykom i ludziom, którzy się na tym znają.

Ja, chcę użyć gotowego rozwiązania, które korzysta ze sprawdzonego i pewnego algorytmu.
Delphi to język nowoczesny i wciąż rozwijający się! Jak widzę jak ktoś wiecznie płacze i ubolewa nad nim (samemu nie używając), to nie mam słów... Używaj człowieku swojej zajebistej technologii i daj nam spokój! Niestety, widzę tutaj na forum kilku zazdrośników, co koniecznie chcą zdeprecjonować Delphi.

Co do mojego problemu... Udało się dodać pliki do IDE (trzeba dodać wiele katalogów do Delphi Library Path). Użycie dla pliku jak i ciągu znaków dla danego algorytmu wygląda względnie prosto.
Przykładowo, poniżej wygenerujemy wartości funkcji skrótu SHA-2 (SHA-256) dla ciągu znaków oraz pliku.

var
 cHash: IHash;
 Value : string;
begin
   cHash := THashFactory.TCrypto.CreateSHA2_256();
   Value := cHash.ComputeString('Ala ma Kota', TEncoding.UTF8).ToString();
   Memo1.Lines.Add(Value);
   Value := cHash.ComputeFile('C:\Windows\notepad.exe').ToString();
   Memo1.Lines.Add(Value);
end;

Rozkminiam resztę... Kudos dla twórcy biblioteki :)

1

Nie wiem czy używasz Delphi czy Lazarusa, bo do tagów dodałeś oba IDE, ale w Lazarusie nie potrzebujesz doinstalowywać pakietu do IDE — wystarczy dodać go w oknie inspektora projektu. Instalacja jest potrzebna tylko jeśli zawartość pakietu ma być używana w designerze formularzy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1