c# - Cookie解密

标签 c# asp.net-mvc cookies encryption

我有一个奇怪的问题;我无法解密 cookie 值。我正在用机器 key 加密它:

网络配置:

  <machineKey decryptionKey="9931B3DF5DAD70FC6696E7F882AC2F51E4D78A72E3A7A2D0" validationKey="3471B0113B1F47164560DAC7AC89694A548B707A332F2BFAF80CBC5F4536217B9B1124F11A13B4E5E02D9EB976205708D9CF2E96F55845B16C4B1EFD8CE1BFAC" validation="SHA1" decryption="AES" />

加密:

   private string Protect(string text, string purpose)
    {
        if (string.IsNullOrEmpty(text))
            return null;

        byte[] stream = Encoding.UTF8.GetBytes(text);
        byte[] encodedValue = MachineKey.Protect(stream, purpose);
        return Convert.ToBase64String(encodedValue);
    }

解密:

 private string Unprotect(string text, string purpose)
    {
        if (string.IsNullOrEmpty(text))
            return null;
        byte[] stream = Convert.FromBase64String(text);
        byte[] decodedValue = MachineKey.Unprotect(stream, purpose);  // Here i have error
        return Encoding.UTF8.GetString(decodedValue);
    }

据我所知,这与机器 key 有关,但我在应用程序中定义了这一部分,所以我不太明白问题出在哪里。

错误:

enter image description here

最佳答案

您的验证过程是 SHA1。

Hashing 不能被逆转(解密)回来。 (至少在可预见的 future )。如果您只需要加密和解密,则使用加密而不是 Hash 方法。 Hash 方法用于密码,因此您无法解密它们。

web 配置中将 validation 过程更改为 AES

<machineKey decryptionKey="9931B3DF5DAD70FC6696E7F882AC2F51E4D78A72E3A7A2D0" validationKey="3471B0113B1F47164560DAC7AC89694A548B707A332F2BFAF80CBC5F4536217B9B1124F11A13B4E5E02D9EB976205708D9CF2E96F55845B16C4B1EFD8CE1BFAC" validation="AES" decryption="AES" />  

关于c# - Cookie解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35626251/

相关文章:

php - 数据库存储与 Cookies - 存储表单数据

c# - 如何使用反射将 System.Type 传递给泛型方法

asp.net - View 中对象或输出的缓存 : Which is better?

javascript - 添加嵌入式谷歌地图时console.log中的警告

asp.net-mvc - 为什么 ASP.Net MVC 可移植区域不像 Rails 插件那样蓬勃发展?

.net - .NET 中的字符串序列化

php - 获取cookie过期时间

c# - 锁定文件同时保留在同一线程中读取/追加/写入/截断的能力?

c# - JavaScript 看不到声明的变量?

c# - 继承 C# Tuple<T, T>,同时向构造函数添加值检查。