在Asp.net中将字节数组转换为字符串

8 asp.net c#-4.0

在Page1.aspx中,我有

byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + byt,false);
Run Code Online (Sandbox Code Playgroud)

TextBox1的值是"mnop".

现在在Page2.aspx我有以下代码

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);
    }
}
Run Code Online (Sandbox Code Playgroud)
  • x1输出是U3lzdGVtLkJ5dGVbXQ ==

  • x2输出是System.Byte []

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

甚至C#:我如何安全地将字节数组转换为字符串并返回?给出了答案为U3lzdGVtLkJ5dGVbXQ ==

谢谢.

Dar*_*rov 10

您不能将原始字节作为查询字符串发送.请尝试使用Base64编码:

byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
string encoded = HttpUtility.UrlEncode(Convert.ToBase64String(byt));
Response.Redirect("Page2.aspx?BytArray=" + encoded, false);
Run Code Online (Sandbox Code Playgroud)

然后检索回来:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当你可以直接发送文本框的字符串值(当然是在url编码之后)时,我真的没有看到转换为字节数组的整个练习的重点.如果这是一种隐藏用户真实价值的方式,我希望你很清楚Base64不是加密,而是编码.