8

Page1.aspx には、

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

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);
    }
}
  • x1出力はU3lzdGVtLkJ5dGVbXQ==です

  • x2出力はSystem.Byte[] です

しかし、「mnop」を取り戻す方法は? 私は何が欠けていますか?

C#でも:バイト配列を安全に文字列に変換して元に戻すにはどうすればよいですか? U3lzdGVtLkJ5dGVbXQ==として答えを出しました

ありがとう。

4

3 に答える 3

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

そしてそれを元に戻します:

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 は暗号化ではなく、エンコーディングであることを十分に認識していただければ幸いです。

于 2012-05-21T06:58:51.927 に答える
1

元のリクエストは を文字列に変換していませんでしたbyt。単にバイトとして使用していました。したがって、この行:

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

実際には次の URL に移動していました。

Page2.aspx?BytArray=System.Byte[]

その行を次のように変更する必要があります。

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

そして、帰りにこれをすべて置き換えます:

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

これだけで:

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

var x2 = Encoding.UTF8.GetString(byteArray);
于 2012-05-21T07:00:27.823 に答える
0

できません。最初のページのコードは、バイト配列の値ではなく、データ型を送信します。Request.QueryString["BytArray"]を返すSystem.Byte[]ため、元のバイトエラーの内容を元に戻すことはできません。

さらにエンコードせずに、URLのデータとしてバイトを送信することはできません。たとえば、base64を使用できます。

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

これで、URLに実際のバイトが含まれるため、次のように取得できます。

byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
string x = System.Text.Encoding.UTF8.GetString(byteArray);
于 2012-05-21T07:02:36.060 に答える