Cookies ASP net 4.5中MachineKey.UnProtect和Cookie的加密异常

Cookies ASP net 4.5中MachineKey.UnProtect和Cookie的加密异常,cookies,encode,asp.net-4.5,Cookies,Encode,Asp.net 4.5,我正在尝试用新的MachineKey.Protect和Unprotect方法替换不推荐的Encode和Decode方法,使用ASP.NET 4.5。我也使用旧方法加密和解密cookie值,但现在调用Unprotect方法时出现CryptographyException 我认为这与试图在cookie值中保存protect方法发出的二进制数据的字符串表示有关 方法很简单: Public Shared Function Encode(text As String) As String If St

我正在尝试用新的
MachineKey.Protect
Unprotect
方法替换不推荐的
Encode
Decode
方法,使用ASP.NET 4.5。我也使用旧方法加密和解密cookie值,但现在调用
Unprotect
方法时出现
CryptographyException

我认为这与试图在cookie值中保存protect方法发出的二进制数据的字符串表示有关

方法很简单:

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编码的替代方法?

编码方法的最后一行应该是:

Return Convert.ToBase64String(encodedValue)
通过这种方式,可以将其传递给Decode方法,在该方法中,您尝试将输入解释为Base64,然后再将其传递给Unprotect方法


(FYI,如果您加密的数据是基于拉丁语的文本,如英语,您可能需要考虑使用EnCOntudi.UTF8而不是Encoding.Unicode。这将导致加密的有效载荷更小)。我会按照你的建议再试一次,然后回来汇报。现在谢谢你的另一个建议:如果你把它存储在cookie中,就考虑使用HTTPSServUTLID.URLtoKeNeNoC/urrtoKunDeCudid。这些方法与ToBase64String/FromBase64String非常相似,但对它们进行了轻微调整,以避免在cookie中出现问题。(例如,经过调整的方法不像常规Base64那样使用“=”字符。)如果可以的话,我会将这个值提高10亿次。我花了一个小时想弄明白,这个问题和答案就成功了。谢谢