We help IT Professionals succeed at work.

Convert Routine from VB to C#

schubduese
schubduese asked
on
756 Views
Last Modified: 2013-12-17
I need to convert the two method below from VB to C#. The method generates a simple Hash.
I am not a VB Programmer and do not understand exactely what the programmer did...

The goal shoud be that the VB and C# Code generates the same Values.

Hope anyone can help me here...
Public Function get_output_simplehash() As String
 
Dim fdata As String
 
Dim HashVal As String, hash As String
Dim hbytes(16) As Byte
Dim dbyte As Byte
Dim l As Long
Dim bb As Long
Dim p As Integer, i As Integer
 
Dim fs As Object, ts As Object
 
get_output_simplehash = ""
 
For i = 1 To 16
    hbytes(i) = 0
Next i
 
l = 0
For bb = 1 To bufferanz
    fdata = buffer(bb)
    l = l + Len(fdata)
    For i = 1 To Len(fdata)
        dbyte = CByte(Asc(Mid(fdata, i, 1)))
        p = i Mod 16 + 1
        hbytes(p) = hbytes(p) Xor dbyte
    Next i
Next bb
 
HashVal = ""
 
For i = 1 To 16
    HashVal = HashVal & " " & Right("0" & Hex(CInt(hbytes(i))), 2)
Next i
 
get_output_simplehash = Trim(HashVal)
 
End Function
 
 
Public Function get_output_md5hash() As String
 
Dim fs As Object, f As Object, ts As Object
Dim i As Integer
Dim fdata As String
 
Dim sContainer As String, sDescription As String, sProvider As String, lHCryptprov As Long
Dim lHHash As Long, lResult As Long, lSignatureLen As Long
 
Dim hdata(24) As Byte
Dim lDataLen As Long
Dim p As Integer
Dim HashVal As String
 
get_output_md5hash = ""
 
'Get handle to the default provider.
sContainer = vbNullChar
sProvider = MS_DEF_PROV & vbNullChar
If Not CBool(CryptAcquireContext(lHCryptprov, ByVal sContainer, ByVal sProvider, PROV_RSA_FULL, 0)) Then
    GoTo ReleaseHandles:
End If
 
'Create a hash object.
If Not CBool(CryptCreateHash(lHCryptprov, CALG_MD5, 0, 0, lHHash)) Then
    GoTo ReleaseHandles:
End If
 
For i = 1 To bufferanz
    fdata = buffer(i)
    If Not CBool(CryptHashData(lHHash, fdata, Len(fdata), 0)) Then
        'MsgBox ("Error " & CStr(GetLastError) & " during CryptHashData!")
        GoTo ReleaseHandles:
    End If
Next i
 
lDataLen = Len(hdata(0)) * (UBound(hdata) + 1)
If Not CBool(CryptGetHashParam(lHHash, HP_HASHVAL, hdata(0), lDataLen, 0)) Then
    GoTo ReleaseHandles:
End If
p = LBound(hdata)
While p <= UBound(hdata)
    If hdata(p) <> 0 Then
        HashVal = HashVal & " " & Right("0" & Hex$(hdata(p)), 2)
    Else
        p = UBound(hdata)
    End If
    p = p + 1
Wend
 
get_output_md5hash = Trim(HashVal)
 
ReleaseHandles:
'Destroy hash object.
If lHHash Then lResult = CryptDestroyHash(lHHash)
'Release provider handle.
If lHCryptprov Then lResult = CryptReleaseContext(lHCryptprov, 0)
 
 
End Function

Open in new window

Comment
Watch Question

Here it is:

 public string get_output_simplehash() {
        string fdata;
        string HashVal;
        string hash;
        byte[,] hbytes;
        byte dbyte;
        long l;
        long bb;
        int p;
        int i;
        object fs;
        object ts;
        get_output_simplehash = "";
        for (i = 1; (i <= 16); i++) {
            hbytes[i] = 0;
        }
        l = 0;
        for (bb = 1; (bb <= bufferanz); bb++) {
            fdata = buffer(bb);
            l = (l + fdata.Length);
            for (i = 1; (i <= fdata.Length); i++) {
                dbyte = byte.Parse(Asc(fdata.Substring((i - 1), 1)));
                p = ((i % 16) 
                            + 1);
                hbytes[p] = hbytes[p];
                dbyte;
            }
        }
        HashVal = "";
        for (i = 1; (i <= 16); i++) {
            HashVal = (HashVal + (" " + ("0" + Hex(int.Parse(hbytes[i]))).Substring((("0" + Hex(int.Parse(hbytes[i]))).Length - 2))));
        }
        return HashVal.Trim();
    }
    
    public string get_output_md5hash() {
        object fs;
        object f;
        object ts;
        int i;
        string fdata;
        string sContainer;
        string sDescription;
        string sProvider;
        long lHCryptprov;
        long lHHash;
        long lResult;
        long lSignatureLen;
        byte[,] hdata;
        long lDataLen;
        int p;
        string HashVal;
        get_output_md5hash = "";
        sContainer = vbNullChar;
        sProvider = (MS_DEF_PROV + vbNullChar);
        if (!bool.Parse(CryptAcquireContext(lHCryptprov, sContainer, sProvider, PROV_RSA_FULL, 0))) {
            goto ReleaseHandles;
        }
        // Create a hash object.
        if (!bool.Parse(CryptCreateHash(lHCryptprov, CALG_MD5, 0, 0, lHHash))) {
            goto ReleaseHandles;
        }
        for (i = 1; (i <= bufferanz); i++) {
            fdata = buffer(i);
            if (!bool.Parse(CryptHashData(lHHash, fdata, fdata.Length, 0))) {
                // MsgBox ("Error " & CStr(GetLastError) & " during CryptHashData!")
                goto ReleaseHandles;
            }
        }
        lDataLen = (hdata[0].Length 
                    * (UBound(hdata) + 1));
        if (!bool.Parse(CryptGetHashParam(lHHash, HP_HASHVAL, hdata[0], lDataLen, 0))) {
            goto ReleaseHandles;
        }
        p = LBound(hdata);
        while ((p <= UBound(hdata))) {
            if ((hdata[p] != 0)) {
                HashVal = (HashVal + (" " + ("0" + Hex(hdata[p])).Substring((("0" + Hex(hdata[p])).Length - 2))));
            }
            else {
                p = UBound(hdata);
            }
            p = (p + 1);
            get_output_md5hash = HashVal.Trim();
        ReleaseHandles:
            if (lHHash) {
                lResult = CryptDestroyHash(lHHash);
            }
            // Release provider handle.
            if (lHCryptprov) {
                lResult = CryptReleaseContext(lHCryptprov, 0);
            }
        }
    }

Open in new window

I used http://www.carlosag.net/Tools/CodeTranslator/ to translate this.

just google "vb to c#"

Author

Commented:
MogalManic, thanks for your reply

I will test it asap

Author

Commented:
My Code is from a VB6 Application, I have seen, that the Translator works between VB.NET and C#.
I think this does not work with VB6!?
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2008
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.