2009-10-02 2 views
1

У меня есть class, что encrypts и decrypts строка. Он использует rijndael. В любом случае, я пытаюсь сохранить зашифрованное значение на клиенте. Это работает отлично и денди. Моя проблема в том, когда я хочу расшифровать значение, мне нужен Key and IV(InitVector), который использовался для шифрования строки. Это значения byte[]. В настоящее время я выводю их клиенту с помощью переменной javascript. Мне они нужны, когда я звоню в службу, так как это приложение разговаривает с мэйнфреймом и ему нужны учетные данные пользователей. Они выводятся на клиента в видеКак преобразовать массив на клиенте в байт [] на сервере?

var vector = [143,147,31,70,195,72,228,190,152,222,65,240,152,183,0,161];

Я могу передать это значение в моей service в виде строки. Мой вопрос заключается в том, что в моем сервисе, как я могу преобразовать этот string обратно в byte array? Я попытался

Encoding.ASCII.GetBytes("[143,147,31,70,195,72,228,190,152,222,65,240,152,183,0,161]");

Но это не то, что я хочу. Это пытается сделать из этого строкового значения новый Byte[]. Мне нужен массив байтов, значения которого находятся внутри строки. Это возможно? Пожалуйста, предоставьте быстрый образец, если вы знаете, как это сделать.

Спасибо, ~ ск в Сан-Диего

ответ

1

Я бы кодировать байты в base64, используя System.Convert.ToBase64String и FromBase64String.

Edit: эта программа демонстрирует это более подробно

class A{ 
     public static void Main() 
     { 
     byte[] a = new byte[]{143,147,31,70,195,72,228,190,152,222,65,240,152,183,0,161}; 
     string s = System.Convert.ToBase64String(a); 
     System.Console.WriteLine(s); 
     byte[] b = System.Convert.FromBase64String(s); 
     System.Console.Write("["); 
     foreach (var n in b) 
      System.Console.Write(n+","); 
     System.Console.WriteLine("]"); 
     } 
} 
+0

это отлично работает Martin. Теперь, когда я дешифруюсь, он записывает нулевые байты. Я просто делаю .replace ("\ 0", string.Empty), и кажется, что все в порядке. Есть ли более элегантный способ? Спасибо всем!!! – Hcabnettek

+0

Я не могу видеть, откуда вы получаете нулевой байт (я также не понимаю, что вы подразумеваете под «расшифровать» - нет операции, называемой «расшифровать» здесь, где бы я ни видел). См. Мое редактирование; в этой программе результат точно такой же, как и вход. –

1

Я думаю, что эти два метода в C# может помочь вам. Я использовал их с моей криптовой процедурой, чтобы получить байт [] для моего IV и Ключа. Возможно ли, что вы можете вывести строку, возвращаемую методом GetString ниже в Javascript, а затем использовать это значение для вызова службы?

private static byte[] GetArray(string input) 
    { 
     List<byte> bytes = new List<byte>(); 

     for (int i = 0; i < input.Length; i += 2) 
     { 
      string hex = input.Substring(i, 2); 
      bytes.Add(Convert.ToByte(Convert.ToUInt32(hex, 16))); 
     } 

     return bytes.ToArray(); 
    } 

    private static string GetString(byte[] input) 
    { 
     StringBuilder buffer = new StringBuilder(input.Length); 
     foreach (byte b in input) 
     { 
      buffer.Append(b.ToString("x2")); 
     } 
     return buffer.ToString(); 
    } 
+0

Я был в процессе публикации чего-то в основном то же самое. +1 –