Как преобразовать массив на клиенте в байт [] на сервере? - PullRequest
1 голос
/ 03 октября 2009

У меня есть 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[] из этого строкового значения. Мне нужен байтовый массив, значения которого находятся внутри строки. Это возможно? Пожалуйста, предоставьте быстрый образец, если вы знаете, как это сделать.

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

Ответы [ 2 ]

1 голос
/ 03 октября 2009

Я думаю, что эти два метода в 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();
    }
1 голос
/ 03 октября 2009

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

Редактировать : эта программа демонстрирует это более подробно

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("]");
      }
}
...