首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MachineKey.Unprotect在从.NET内核引用时导致异常

MachineKey.Unprotect在从.NET内核引用时导致异常
EN

Stack Overflow用户
提问于 2020-06-03 21:45:28
回答 1查看 562关注 0票数 0

我引用的是一个来自.NET核心应用程序的ASP.NET框架4.7.2类库。框架代码包括MachineKey.Unprotect,这似乎会导致以下错误:

无法从程序集“System.Web、Version=4.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f7f7f11d50a3a”加载“System.Web”类型。

这是某种限制,还是有解决办法?

EN

回答 1

Stack Overflow用户

发布于 2020-06-04 02:21:31

因为System.Web.Security不是用.NETStandard构建的,所以我们不能在asp.net核心应用程序中使用它。

根据您的描述,如果您想解密机器密钥加密值。我建议您尝试使用实现asp.net MachineKey.upprotect方法的第三方库。例如:AspNetTicketBridge。您可以直接从Nuget包装安装它。

更多细节,您可以参考下面的测试演示:

保护asp.net应用程序中的消息。

代码语言:javascript
复制
    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;

    }

机器钥匙:

代码语言:javascript
复制
<machineKey compatibilityMode="Framework45" validationKey="xxx" decryptionKey="xxx" validation="SHA1" decryption="Auto" />

解除保护asp.net核心应用程序中的消息:

代码语言:javascript
复制
        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的源代码。详细信息,您可以参考这个回答

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62183252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档