cryptlib
 
Мощный инструмент безопасности, который позволяет даже неопытным крипто-программистам легко добавить шифрование и услуги аутентификации к их программному обеспечению.

Вебсайт: http://www.cs.auckland.ac.nz/~pgut001/cryptlib/
Поддерживаемые платформы: Win32, Linux
Заголовки: cryptlib.bi
Версия заголовков: от 2005 года
Примеры: в examples/math/cryptlib/

Пример

#include once "cryptlib.bi"

Function calc_hash( ByVal filename As String, ByVal algo As CRYPT_ALGO_TYPE ) As String
    Const BUFFER_SIZE = 8192
    Dim As Byte buffer( 0 To BUFFER_SIZE-1 )

    '' создания нового контекста для использования желаемого алгоритма
    Dim As CRYPT_CONTEXT ctx
    cryptCreateContext( @ctx, CRYPT_UNUSED, algo )

    '' открыть файл для ввода в двоичном режиме
    Dim As Integer f = FreeFile()
    If( Open( filename For Binary Access Read As #f ) <> 0 ) Then
        Return ""
    End If

    '' читаем до конца файла
    Do Until( EOF( f ) )
        Dim As Integer oldpos = Seek( f )
        Get #f, , buffer()
        Dim As Integer readlength = Seek( f ) - oldpos
        '' шифруем
        cryptEncrypt( ctx, @buffer(0), readlength )
    Loop

    '' закрываем файл
    Close #f

    '' завершение
    cryptEncrypt( ctx, 0, 0 )

    '' получить результат хэша
    Dim As Integer buffersize = BUFFER_SIZE
    cryptGetAttributeString( ctx, CRYPT_CTXINFO_HASHVALUE, @buffer(0), @buffersize )

    '' преобразовываем в шестнадцатеричное
    Dim As String result = ""
    For i As Integer = 0 To buffersize-1
        result += Hex( buffer(i) )
    Next
    
    '' освобождаем контекст
    cryptDestroyContext( ctx )

    Return result
End Function

    Dim As String filename = Trim( Command(1) )
    If( Len( filename ) = 0 ) Then
        Print "Usage: hash.exe filename"
        End -1
    End If

    '' инициализация cryptlib
    cryptInit( )

    '' Подсчитываем хеш
    Print "md5: "; calc_hash( filename, CRYPT_ALGO_MD5 )
    Print "sha: "; calc_hash( filename, CRYPT_ALGO_SHA )

    '' отключение cryptlib
    cryptEnd( )

    Sleep