2011-01-26 3 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# было бы проще - по какой причине вы не можете это использовать? –

+0

Преобразование C# было бы достаточно, просто Java у меня не было никакого опыта. –

+0

Вместо линейного порта функции (или двух) с одного языка на другой ... Как насчет понимания того, что функция выполняет и реализует ее непосредственно на нужном языке? (Которые могут иметь встроенную функциональность, которая может быть использована.) – David

ответ

0

Самая сложная часть здесь, кажется, переделает метод SHA1. Вам просто нужно найти эквивалентные классы/методы библиотеки .NET. Судя по именам, вам, вероятно, нужен класс System.Text.Encoding и класс System.Security.Cryptography.SHA1. Off стороны, алгоритм, вероятно, в конце концов что-то вроде этого

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, чтобы беспокоиться о том, чтобы поймать.