2011-01-26 51 views
0

我在這裏有一個Java代碼片段,我想知道是否有可能轉換爲VB.Net,因爲我沒有找到VB.Net的代碼片段 - 只有這個:Java到VB.Net轉換此函數

private static byte[] SHA1(final String in) 
      throws NoSuchAlgorithmException, UnsupportedEncodingException { 
     MessageDigest md = MessageDigest.getInstance("SHA-1"); 
     md.update(in.getBytes("iso-8859-1"), 0, in.length()); 
     return md.digest(); 
    } 

    public static String decryptSHA1(String key, final String start) { 
     final String delim = "a"; 
     if (start == null) 
      return null; 
     byte[] hashedkey; 
     byte[] password; 
     int i; 
     try { 
      hashedkey = SHA1(key); 
     } catch (final NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
      return start; 
     } catch (final UnsupportedEncodingException e) { 
      e.printStackTrace(); 
      return start; 
     } 
     final String[] temp = start.split(delim); 
     password = new byte[temp.length]; 
     for (i = 0; i < hashedkey.length; i++) { 
      final int temp2 = Integer.parseInt(temp[i]); 
      if (hashedkey[i] == temp2) { 
       break; 
      } else { 
       password[i] = (byte) (temp2 - hashedkey[i]); 
      } 
     } 
     return new String(password, 0, i); 
    } 

感謝您的任何建議。

+0

可以將任何東西翻譯成VB.Net。但是C#會更容易 - 爲什麼你不能使用它? – 2011-01-26 18:18:41

回答

0

這裏最難的部分似乎是重做SHA1方法。你只需要找到等效的.NET庫類/方法。從名稱來看,您可能需要System.Text.Encoding類和System.Security.Cryptography.SHA1類。斷手,算法可能結束這樣的事情

Private Shared Function SHA1(input As String) As Byte() 
    Dim iso8859 = System.Text.Encoding.GetEncoding("iso-8859-1") 
    Dim inBytes = ios8859.GetBytes(input) 
    ' This is one implementation of the abstract class SHA1.' 
    Dim sha As New SHA1CryptoServiceProvider() 
    Return sha.ComputeHash(data) 
End Function 

從那裏,你應該能夠剩下自己轉換decryptSHA1功能,因爲它僅僅是基本的字節操作。我會注意到GetEncoding函數說它會拋出ArgumentException,如果你傳遞了一個無效的代碼頁名稱,並且似乎沒有任何等效的例外NoSuchAlgorithmException擔心捕獲。