2

Encode非推奨のandメソッドを ASP.NET 4.5Decodeの新しいMachineKey.Protectandメソッドに置き換えようとしています。Unprotect古いメソッドを使用して Cookie 値の暗号化と復号化も行っていましたが、Unprotectメソッドを呼び出すとCryptographyException.

これは、保護メソッドによって発行されたバイナリ データの文字列表現を Cookie 値に保存しようとすることと関係があると思います。

メソッドは簡単です。

Public Shared Function Encode(text As String) As String
   If String.IsNullOrEmpty(text) Then
        Return String.Empty
    End If
    Dim stream As Byte() = Encoding.Unicode.GetBytes(text)
    Dim encodedValue As Byte() = MachineKey.Protect(stream, "test")
    Return Encoding.Unicode.GetString(encodedValue)
End Function

Public Shared Function Decode(text As String) As String
    If String.IsNullOrEmpty(text) Then
        Return String.Empty
    End If
    Dim stream As Byte() = Convert.FromBase64String(text)
    Dim decodedValue = MachineKey.Unprotect(stream, "test")
    Return Encoding.Unicode.GetString(decodedValue)
End Function

Cookie 値を使用して新しいメソッドを実装する方法に関するヒントはありますか? または、非推奨のエンコード/デコード メソッドまたは Cookie エンコーディングの代替方法に固執する必要がありますか?

4

1 に答える 1

3

Encodeメソッドの最後の行は次のようになります。

Return Convert.ToBase64String(encodedValue)

このようにして、Decodeメソッドに渡すことができます。このメソッドでは、入力を Base64 として解釈してからUnprotectメソッドに渡します。

(参考までに、暗号化するデータが英語のようなラテン語ベースのテキストの場合、 Encoding.Unicode の代わりに Encoding.UTF8 の使用を検討することをお勧めしますこれにより、暗号化されたペイロードが少し小さくなります。)

于 2012-12-17T21:05:59.590 に答える