关于C 4.0:在ASP.NET中将字节数组转换为字符串

Convert byte array to string in Asp.net

在page1.aspx中,我有

1
2
byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + byt,false);

textbox 1的值为"mnop"。

现在在page2.aspx中,我有下面的代码

1
2
3
4
5
6
7
8
9
10
11
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {          
        var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]);

        var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length);

        var x2 = Encoding.UTF8.GetString(byteArray);
    }
}
  • x1输出为u3lzdgvtlkj5dgvbxq==

  • x2输出为system.byte[]

但是如何让"mnop"回来呢?我错过了什么?

即使是C:如何安全地将字节数组转换为字符串并返回?回答为U3LZdgvtlkj5dgvbxq==

谢谢。


不能将原始字节作为查询字符串发送。尝试使用base64编码:

1
2
3
byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
string encoded = HttpUtility.UrlEncode(Convert.ToBase64String(byt));
Response.Redirect("Page2.aspx?BytArray=" + encoded, false);

然后取回:

1
2
3
4
5
6
7
8
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {          
        byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
        string value = System.Text.Encoding.UTF8.GetString(byteArray);
    }
}

但是,当您可以直接按原样发送文本框的字符串值时(当然是在URL对其进行编码之后),我真的看不到转换为字节数组的整个练习的要点。如果这是一种隐藏用户真实值的方法,我希望您很清楚base64不是加密的,它是编码的。


最初的请求并没有将byt转换成字符串,只是将其用作字节。所以这条线:

1
Response.Redirect("Page2.aspx?BytArray=" + byt,false);

实际上是要访问这个网址:

1
Page2.aspx?BytArray=System.Byte[]

您需要将该行更改为:

1
Response.Redirect("Page2.aspx?BytArray=" + HttpUtility.UrlEncode(System.Convert.ToBase64String(byt)), false);

在回来的路上,把这些都换掉:

1
2
3
4
5
var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]);

var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length);

var x2 = Encoding.UTF8.GetString(byteArray);

就这样:

1
2
3
var byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);

var x2 = Encoding.UTF8.GetString(byteArray);


不能。第一页中的代码不会发送字节数组的值,而是发送数据类型。Request.QueryString["BytArray"]返回System.Byte[],所以不可能返回原始字节arrray的内容。

如果不进一步对字节进行编码,则无法在URL中以数据形式发送字节。例如,您可以使用base64:

1
2
byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + Server.UrlEncode(Convert.ToBase64String(byt)), false);

现在,URL包含实际字节,因此可以获取这些字节:

1
2
byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
string x = System.Text.Encoding.UTF8.GetString(byteArray);