2012-01-04 5 views
0
私は、次の LINKに記載された方法を使用していますが、私は暗号化するために、次のコードを使用してい

デコード暗号化されたクエリ文字列

'Page1.aspx  
Protected Sub butEncrypt_Click(sender As Object, e As EventArgs) Handles butEncrypt.Click 
    Dim QueryString As String = "type=Int&pk=" & _primaryKey 
    QueryString = Tools.encryptQueryString(QueryString) 
    Response.Redirect(/SearchResults.aspx?Val=" & QueryString) 
End Sub 

そして最後に非暗号化:

 'SearchResults.aspx 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If (Not IsPostBack) Then 
     If Not String.IsNullOrEmpty(HttpContext.Current.Request(CIAppGlobals.GlobalVar.Val)) Then 
      Dim qs As String = Request.QueryString(CIAppGlobals.GlobalVar.Val) 
      qs = Tools.decryptQueryString(qs) 

      Dim Values As String() = qs.Split(CChar("&")) 

      _imageType = String.Empty 
      _primaryKey = 0 

      For Each value As String In Values 
       Dim data As String() = value.Split(CChar("=")) 

       Select Case data(0).ToUpper 
        Case "TYPE" 
        _imageType = data(1) 
        Case "PK" 
        _primaryKey = CInt(data(1)) 
       End Select 
      Next 
      Else 
       _imageType = HttpContext.Current.Request("type") 
       _primaryKey = CInt(HttpContext.Current.Request("pk")) 
     End If 
    End If 
    End Sub 

私の質問を私がやっていること以外のデコードされたクエリ文字列の値を抽出するために別の方法を使用しているのですか?あなたの建設的な対応に感謝します。私はまだ私がないようにしたいので、クエリ文字列を暗号化する

'Page1.aspx  
Protected Sub butEncrypt_Click(sender As Object, e As EventArgs) Handles butEncrypt.Click 
    Dim query = HttpUtility.ParseQueryString(String.Empty) 
    query("type") = "Int" 
    query("pk") = CStr(_primaryKey) 

    Dim QueryString As String = Tools.encryptQueryString(query.ToString()) 
    Response.Redirect(/SearchResults.aspx?Val=" & QueryString) 
End Sub 

ソリューションは

ダーリンの応答を見た後、私は自分のプロジェクトに組み込むことにしました、ここに私の更新されたコードですユーザーがクエリ文字列値を手動で変更しないようにする

答えて

1

最初にクエリ文字列を間違って作成しています。文字列の連結を使用していて、それらを正しくエンコードしていません。 _primaryKey&または=文字が含まれる場合はどうなりますか?あなたは適切にクエリ文字列を構築するためにParseQueryStringメソッドを使用することができます。

Dim query = HttpUtility.ParseQueryString(String.Empty) 
query("type") = "Int" 
query("pk") = _primaryKey 
Dim queryString = query.ToString() 

同じ方法でデコードされたクエリ文字列を解析するために使用することができます。

Dim values = HttpUtility.ParseQueryString(qs) 
Dim type = query("type") 
Dim primaryKey = query("pk") 
' work with the type and primaryKey values 

のURLを扱うときに、文字列の連結や分割を使用しないでください。正しい職場には常に適切なツールを使用してください。

これは、クエリ文字列の作成/解析に関する限りです。暗号化/復号化に関する限り、使用しているToolsクラスについては表示/非表示をしていませんので、建設的なコメントは提供できません。

最高の暗号化は、実際の値を決してクライアントに送信しないことです。だからあなたはサーバー上のいくつかのバックエンドのストレージにそれを格納し、URLで一意のIDを使用することができます。このidは、元の値を取得するためにターゲットページで使用できます。この方法で、何かを暗号化/復号化する必要はありません。

+0

お返事ありがとうございます。 Toolsクラスには、OP(http://stackoverflow.com/a/1330421/100283)で参照されているリンクで見つかった2つのメソッドが含まれています。私はデータベースに値を保存したいと思いますが、私はそれに新しい変更を加えることはできませんので、従来のデータベースで作業しています。 –

+0

[OK]を意味しますが、Typeは5つの異なる値(Int、Sbj、Veh、Grp、およびBus)のうちの1つであり、_primaryKeyは整数値です。だからどちらの値にも&とか=の文字が含まれることはありません。私はそれが傷つけないようにあなたの解決策に追加します。 –

関連する問題