如何将客户端上的数组转换为服务器上的byte []?

时间:2009-10-02 22:40:52

标签: c# string encoding bytearray

我有class encryptsdecrypts字符串。它使用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[]。我需要一个字节数组,其值是字符串中的值。这可能吗?如果您知道如何做,请提供快速示例。

谢谢, 〜在圣地亚哥

2 个答案:

答案 0 :(得分:1)

我会使用System.Convert.ToBase64String和FromBase64String对base64中的字节进行编码。

修改:此计划更详细地说明了这一点

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

答案 1 :(得分:1)

我认为C#中的这两种方法可能会对您有所帮助。我已经将这些用于我的加密例程,以便为我的IV和Key获取一个byte []。是否有可能在Javascript中输出从下面的GetString方法返回的字符串,然后使用该值来调用服务?

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