解密 ASP.NET Core 中的“.AspNetCore.Session”cookie
Decrypt ".AspNetCore.Session" cookie in ASP.NET Core
在 Asp.Net 核心中,当您将应用配置为 app.UseSession()
时会创建一个 cookie。
默认情况下,cookie 名为“.AspNetCore.Session”。它的值标识要使用的会话。目前,我将会话数据保存在 sql 服务器上。我需要知道“.AspNetCore.Session”的解密值,以便我可以在数据库中查找会话。
有没有办法解密这个值?我知道 ASP.NET 必须以某种方式在幕后进行。
session source has everything, but you should need to know it, ISessionStore and IDistributedSessionStore 给你一个会话密钥。
不是假设 cookie 格式,是什么阻止您使用商店 API?
我不得不从 Microsoft.AspNetCore.Session
中提取私有 Pad
函数,但我能够得到我需要的东西:
public class DiscussionController : Controller
{
private readonly IDataProtector _dataProtector;
public DiscussionController(IDataProtectionProvider dataProtectionProvider)
{
var protectorPurpose = "whatever purpose you want";
_dataProtector = dataProtectionProvider.CreateProtector(protectorPurpose);
}
public IActionResult Index()
{
HttpContext.Request.Cookies.TryGetValue(".AspNetCore.Session", out string cookieValue);
var protectedData = Convert.FromBase64String(Pad(cookieValue));
var unprotectedData = _dataProtector.Unprotect(protectedData);
var humanReadableData = System.Text.Encoding.UTF8.GetString(unprotectedData);
return Ok();
}
private string Pad(string text)
{
var padding = 3 - ((text.Length + 3) % 4);
if (padding == 0)
{
return text;
}
return text + new string('=', padding);
}
}
在 Asp.Net 核心中,当您将应用配置为 app.UseSession()
时会创建一个 cookie。
默认情况下,cookie 名为“.AspNetCore.Session”。它的值标识要使用的会话。目前,我将会话数据保存在 sql 服务器上。我需要知道“.AspNetCore.Session”的解密值,以便我可以在数据库中查找会话。
有没有办法解密这个值?我知道 ASP.NET 必须以某种方式在幕后进行。
session source has everything, but you should need to know it, ISessionStore and IDistributedSessionStore 给你一个会话密钥。
不是假设 cookie 格式,是什么阻止您使用商店 API?
我不得不从 Microsoft.AspNetCore.Session
中提取私有 Pad
函数,但我能够得到我需要的东西:
public class DiscussionController : Controller
{
private readonly IDataProtector _dataProtector;
public DiscussionController(IDataProtectionProvider dataProtectionProvider)
{
var protectorPurpose = "whatever purpose you want";
_dataProtector = dataProtectionProvider.CreateProtector(protectorPurpose);
}
public IActionResult Index()
{
HttpContext.Request.Cookies.TryGetValue(".AspNetCore.Session", out string cookieValue);
var protectedData = Convert.FromBase64String(Pad(cookieValue));
var unprotectedData = _dataProtector.Unprotect(protectedData);
var humanReadableData = System.Text.Encoding.UTF8.GetString(unprotectedData);
return Ok();
}
private string Pad(string text)
{
var padding = 3 - ((text.Length + 3) % 4);
if (padding == 0)
{
return text;
}
return text + new string('=', padding);
}
}