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 "用法:hash.exe文件名"
        End -1
    End If

    ''init cryptlib
    cryptInit( )

    ''计算散列
    Print "md5:"; calc_hash( filename, CRYPT_ALGO_MD5 )
    Print "sha:"; calc_hash( filename, CRYPT_ALGO_SHA )

    ''关闭cryptlib
    cryptEnd( )

    Sleep