# Umwandung von Vb auf Java



## greddy2010 (12. Aug 2022)

Hallo Zusammen,

ich bin neu hier (auch im Thema Java)  und weiß nicht ob das hier der richtige Ort ist.
Ich habe ein VB Code und will in den Java für eine Handyapp programmieren, jedoch bekomme ich in Java immer ein anderes Endergebnis raus und weiß nicht,
wo mein Fehler liegt, bzw. was ich falsch mache. VIelleicht kann mir jemand hier weiterhelfen.

*
VB Code: *
    Private Function PasswortlevelHash(ByVal Passworltevel As String, ByVal Tag As String, ByVal Monat As String, ByVal Jahr As String) As String
        Dim uEncode As New UnicodeEncoding
        Dim md5 As New MD5CryptoServiceProvider

        'String für Hashgeneration erzeugen 
        'Dim strForHash As String = "MS-U4_" & Jahr & "_" & Monat & "_" & Tag & Passworltevel
        Dim strForHash As String = "MS-U4_2022_08_12setup"

        Dim bytHashNeu() As Byte = uEncode.GetBytes(strForHash)

        Dim strHash1 As String = Convert.ToBase64String(md5.ComputeHash(bytHashNeu))

        PasswortlevelHash = strHash1
    End Function
*Ergebnis ist: hoQmNyvsIKLPB31kp0TXNg==

Java:*
    private String PasswortlevelHash(String strPasswortlevel, String strDay, String strMonth, String strYear) throws Exception {
        MD5 md5 = new MD5();

        //String strForHash = "MS-U4_" + strYear + "_" + strMonth + "_" + strDay + strPasswortlevel;
        String strForHash = "MS-U4_2022_08_12setup"
        byte[] bytHash = strForHash.getBytes("UTF-8");

        String base =  Base64.getEncoder().encodeToString(bytHash);

        String strHash2 = md5.getMd5(base);
        return  strHash2 ;

    }

Vielen Dank


----------



## Robert Zenz (12. Aug 2022)

Erstens ist in deinem Java Code die Reihenfolge verdreht.

Zweitens ist es, ich bedaure es so direkt sagen zu muessen, aber es ist die klassische Microsoft-Verarsche auf die du hereingefallen bist soweit ich das sehen kann. Die Welt hat sich auf UTF-8/16 geeinigt, waehrenddessen verwendet Microsoft immer Windows-1252. Als sie dem Druck nachgeben mussten, haben sie entschieden uns allen einen Gefallen zu tun, und *immer* das BOM bei UTF-8 mitzuschreiben, wann immer sie koennen. Die Dokumentation vom Konstruktor sagt dies aber auch. Also du musst dir ein `UnicodeEncoding` Objekt erzeugen welches _nicht_ das BOM schreibt.


----------

