[PR]

ハッシュ DLL

戻る
動作環境 / バージョン / 正規表現 / 日時書式 / 文字分類 / ハッシュ DLL

C・C++ / VB.NET / VB / VBA

関数

LIBRARY
EXPORTS
  CreateAlgorithm        @1 ; アルゴリズムへのハンドルを作成します。
  DestroyAlgorithm       @2 ; アルゴリズムを破棄します。
  InitAlgorithm          @3 ; アルゴリズムを初期化します。
  InputData              @4 ; アルゴリズムへデータを入力します。
  GetHashLength          @5 ; ハッシュのサイズをバイト数で取得します。
  GetHash                @6 ; 入力されたデータからハッシュを取得します。
  GetHashTextLength      @7 ; ハッシュ文字列の文字列長をバイト数で取得します。
  GetHashText            @8 ; 入力されたデータからハッシュ文字列を取得します。

宣言?

これらのコードは普段 VB を使用していない作者が一度も実行・コンパイルすることなく想像に頼って書いたコードです。 そこまで大きく的から外れているとも思ってはいませんが、この書き方を推奨するものでも動作を保証するものでもありません。 むしろ「VB で、そうは書かない」といった点を御指摘いただけますと大変うれしく思います。 (2007/09/14)

Declare Function CreateAlgorithm() As Long
Declare Function DestroyAlgorithm( ByVal hAlgorithm As Long ) As Long
Declare Function InitAlgorithm( ByVal hAlgorithm As Long ) As Long
Declare Function InputData( ByVal hAlgorithm As Long, ByVal data As Long, ByVal length As Long ) As Long
Declare Function GetHashLength( ByVal hAlgorithm As Long ) As Long
Declare Function GetHash( ByVal hAlgorithm As Long, ByVal buffer As Long, ByVal bufsize As Long ) As Long
Declare Function GetHashTextLength( ByVal hAlgorithm As Long ) As Long
Declare Function GetHashText( ByVal hAlgorithm As Long, ByRef buffer As String, ByVal bufsize As Long ) As Long


サンプル?

これらのコードは普段 VB を使用していない作者が一度も実行・コンパイルすることなく想像に頼って書いたコードです。 そこまで大きく的から外れているとも思ってはいませんが、この書き方を推奨するものでも動作を保証するものでもありません。 むしろ「VB で、そうは書かない」といった点を御指摘いただけますと大変うれしく思います。 (2007/09/14)

' HANDLE 型, ポインタ型, int 型 は同サイズの Long 型で代用。
' バージョンによっては VB/VBA にもポインタ型があるらしい?
Declare Function CreateAlgorithm Lib "md5.dll" () As Long
Declare Function DestroyAlgorithm Lib "md5.dll" (ByVal hAlgorithm As Long) As Long
Declare Function InitAlgorithm Lib "md5.dll" (ByVal hAlgorithm As Long) As Long
Declare Function InputData Lib "md5.dll" (ByVal hAlgorithm As Long, ByVal data As String, ByVal length As Long) As Long
Declare Function GetHashLength Lib "md5.dll" (ByVal hAlgorithm As Long) As Long
Declare Function GetHash Lib "md5.dll" (ByVal hAlgorithm As Long, ByVal buffer As Long, ByVal bufsize As Long) As Long

Sub Main()
	Dim result As Long        '
	Dim hAlgorithm As Long    ' アルゴリズムへのハンドル
	Dim length As Long        ' ハッシュ値のバイト数
	Dim char As String        ' ハッシュ値を文字列化する過程で使用する一時変数
	Dim text As String        ' ハッシュ値を文字列化したもの
	Dim hash(1 To 16) As Byte ' ハッシュ値を格納する配列
	
	' アルゴリズムの取得
	hAlgorithm = CreateAlgorithm()
	If hAlgorithm = 0 Then
	    MsgBox "error! CreateAlgorithm()"
	End If

	' アルゴリズムの初期化
	result = InitAlgorithm( hAlgorithm )
	If result <> 0 Then
		MsgBox( "error! InitAlgorithm()" )
	End If
	
	' ここでハッシュ化したいデータを入力する
	result = InputData( hAlgorithm, "sample text", Len("sample text") )
	If result <> 0 Then
		MsgBox( "error! InputData()" )
	End If

	' VarPtr で 配列 hash の先頭要素へのアドレスを取得する。
	length = GetHashLength( hAlgorithm )
	result = GetHash( hAlgorithm, VarPtr(hash(1)), length )
	If result <> 0 Then
		MsgBox( "error! GetHash()" )
	End If
	
	' バイト列として得たハッシュを表示できるように文字列化する。
	For i = 1 To length Step 4
	    For j = 0 To 3 Step 1
	        char = Hex( hash(i + j) )
	        If Len(char) < 2 Then
	            char = "0" + char
	        End If
	        text = text + char
	    Next j
	Next i
	
	' アルゴリズムの破棄
	result = DestroyAlgorithm( hAlgorithm )
	If result <> 0 Then
		MsgBox( "error! DestroyAlgorithm()" )
	End If

	' ハッシュ値の表示
	MsgBox( text )

End Sub

Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
『新妻LOVELY×CATION』を応援しています!