2

我正在尝试用 ASP.NET 4.5的新方法Encode和方法替换已弃用的方法和方法。我也使用旧方法来加密和解密 cookie 值,但现在在调用方法时,我有一个.DecodeMachineKey.ProtectUnprotectUnprotectCryptographyException

我认为这与尝试在 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.UTF8而不是Encoding.Unicode。这将导致加密的有效负载更小。)

于 2012-12-17T21:05:59.590 回答