【问题标题】:How do I convert an array on the client into a byte[] on the server?如何将客户端上的数组转换为服务器上的 byte[]?
【发布时间】:2009-10-02 22:40:51
【问题描述】:

我有一个 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[]。我需要一个字节数组,其值是字符串内的值。这可能吗?如果您知道如何执行此操作,请提供一个快速示例。

谢谢, ~ck 在圣地亚哥

【问题讨论】:

    标签: c# string encoding bytearray


    【解决方案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("]");
          }
    }
    

    【讨论】:

    • 这很好用,马丁。现在,当我解密时,它会附加空字节。我只是做了一个 .replace("\0", string.Empty) ,它似乎没问题。有没有更优雅的方式?谢谢大家!!!
    • 我看不到你从哪里得到一个空字节(我也不明白你所说的“解密”是什么意思——在我能看到的任何地方都没有称为“解密”的操作)。查看我的编辑;在这个程序中,结果与输入完全相同。
    【解决方案2】:

    我认为 C# 中的这两种方法可能会对您有所帮助。我已将这些与我的加密例程一起使用,以便为我的 IV 和密钥获取一个字节 []。是否可以在 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();
        }
    

    【讨论】:

    • 我正在发布基本相同的内容。 +1
    猜你喜欢
    • 1970-01-01
    • 2018-07-13
    • 2012-08-30
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多