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亿次。我花了一个小时想弄明白,这个问题和答案就成功了。谢谢