我引用的是一个来自.NET核心应用程序的ASP.NET框架4.7.2类库。框架代码包括MachineKey.Unprotect,这似乎会导致以下错误:
无法从程序集“System.Web、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f7f7f11d50a3a”加载“System.Web”类型。
这是某种限制,还是有解决办法?
发布于 2020-06-04 02:21:31
因为System.Web.Security不是用.NETStandard构建的,所以我们不能在asp.net核心应用程序中使用它。
根据您的描述,如果您想解密机器密钥加密值。我建议您尝试使用实现asp.net MachineKey.upprotect方法的第三方库。例如:AspNetTicketBridge。您可以直接从Nuget包装安装它。
更多细节,您可以参考下面的测试演示:
保护asp.net应用程序中的消息。
protected void Page_Load(object sender, EventArgs e)
{
//Label1.Text = HttpContext.Current.User.Identity.Name;
var message = "My secret message";
var encodedMessage = Encoding.ASCII.GetBytes(message);
var protectedMessage = MachineKey.Protect(encodedMessage);
var protectedMessageAsBase64 = Convert.ToBase64String(protectedMessage);
Label2.Text = protectedMessageAsBase64;
}机器钥匙:
<machineKey compatibilityMode="Framework45" validationKey="xxx" decryptionKey="xxx" validation="SHA1" decryption="Auto" />解除保护asp.net核心应用程序中的消息:
string validationKey = "machinekey value";
string decryptionKey = "machinekey value";
var message = "above base64 message";
var convertFromBase64 = Convert.FromBase64String(message);
var ticket = MachineKeyTicketUnprotector.Unprotect(convertFromBase64, decryptionKey, validationKey, "AES", "HMACSHA1", "User.MachineKey.Protect");
var decodedMessage = Encoding.ASCII.GetString(ticket);结果:

如果您想在asp.net核心应用程序中实现使用机器键,可以尝试实现来自.net Framework machinekey.cs的源代码。详细信息,您可以参考这个回答。
https://stackoverflow.com/questions/62183252
复制相似问题