-
i am doing a small vb project http://dir2html.tk and i want to add a feature for p2p world users to instantly genarate hashes for p2p applications, (as an alternative to http) for all files in dir with 1 click.
i tried
http://www.planet-source-code.com/URLSEO/v...3;5/anyname.htm
but it always gets the hash wrong
i also tried ksig and sig2dat src codes, they are doing the job.
what i need now is a how to make a dll file that does the hash, out of those source codes and info on how to implement it in my vb tool. (credits will be naturaly included)
thanx in advance
-
Download KLExtensions source from www.o-townnet.tk. Then get PowerBASIC Windows compiler 7 from eMule. There is a file called hash.inc in the sources. Add to the biginning of the file:
Code:
#compile dll "hash.dll"
#include "win32api.inc"
The replace the line:
Code:
Function GetHash(ByVal sFileName As String, ByVal pbHash As Byte Ptr) As Long
with
Code:
Function GetHash(ByVal sFileName As String, ByVal pbHash As Byte Ptr) Export As Long
Then compile. It will generate a dll file called hash.dll.
The Visual Basic Declare should look as :
Code:
Declare Function GetHash LIB "Hash.dll" (sFileName As String, ByRef pbHash As Byte) As Integer
Example call:
Code:
Dim sFile as String
Dim bHash(1 To 20) as Byte
sFile = "MyFile.dat"
GetHash(sFile, bHash(1))
To encode to Base64 there is a function called Encode_BASE64 that do the job.
Rocko
-
thank you rocko
i've got the dll, delclared the function (it had to be ucase: GETHASH) and types had to be de-remarked:
Code:
TYPE MD5_CTX
dwState(3) AS LONG 'state (ABCD)
lCount(1) AS LONG 'number of bits modulo 2^64 (lsp first)
bBuffer(63) AS BYTE 'input buffer
END TYPE
.... in vb module
Code:
Declare Function GETHASH Lib "hash.dll" (sFileName As String, ByRef pbHash As Byte) As Integer
...vb code
Code:
sFile = "d:\testfile.bin"
txtRez.Text = GETHASH(sFile, bHash(1))
Open "bytes_out.txt" For Output As #2
For i = 1 To 20
txtHash.Text = txtHash.Text + Str$(bHash(i))
Print #2, bHash(i)
Next
Close (2)
I don't know where to read the value
GETHASH returns 0
bHash(i) 's are all zeros after calling
and when i suceed, how do i make sig2dat:// and ed2k:// links like from sig2dat does (hashes are different)?
testfile.bin sig2dat
testfile.bin ed2k
-
The function returns non zero on success and zero when it fails. Maybe the parameters aren't passed correctly to the function.
Add the DebugPrint MACRO from the main.bas file to hash.inc then add a line at the begining of GetHash like DebugPrint("sFileName: " + sFileName)
Use DebugView from sysinternal (www.sysinternals.com) to see the output. The output should display the filename your are passing to the function.
Try it and tell me what happen.
Rocko
-
I added byval to sFileName and called
Code:
Private Declare Function ENCODE_BASE64 Lib "hash.dll" (ByRef pbInBuf As Byte, ByVal lBufLen As Long) As String
the lBufLen is 20
btw i ve uploadded everything here.
everything works now. i'll leave the working forms and sources up, if anyone else is interested in how to use md5 in visual basic.
i also compiled dir2sig which is optimized for fast hash making, rather than linking to raw data.
thanx again for helping me with this, one more question, how to make ed2k hashes?