C# CryptographicException:加密操作期间出错

C# CryptographicException:加密操作期间出错,c#,wpf,security,C#,Wpf,Security,我有一个字符串要在运行时在我的C#WPF应用程序中解密 我想我可以使用以下代码: using System.Text; using System.Web; using System.Web.Security; [Test] public void Encrypt() { var text = "This is my string"; var stream = Encoding.UTF8.GetBytes(text); va

我有一个字符串要在运行时在我的C#WPF应用程序中解密

我想我可以使用以下代码:

using System.Text;
using System.Web;
using System.Web.Security;

    [Test]
    public void Encrypt()
    {
        var text = "This is my string";
        var stream = Encoding.UTF8.GetBytes(text);
        var encodedValue = MachineKey.Protect(stream);
        var result = HttpServerUtility.UrlTokenEncode(encodedValue);
    }

    [Test]
    public void Decrypt()
    {
        var text = "ZG1CrjMgyq5O1krnBxoYM5rXH071xVxFnhC3xTTBiJ05Uy4msSe0jonP-ayFuChh_M6EaEhMif_j7i8yUSQ4Pkc63moEbvq34hMZGfYkazo1";
        var stream = HttpServerUtility.UrlTokenDecode(text);
        var decodedValue = MachineKey.Unprotect(stream);
        var result = Encoding.UTF8.GetString(decodedValue);
    }
但是我得到了一个

CryptographicException:加密操作期间出错

在我的WPF应用程序中运行Unprotect命令时出错。有什么想法吗

--
如果上述代码仅适用于web应用程序(即,不适用于WPF),为什么在单元测试中调用时它可以工作?

尝试这些解决方案,希望它可以工作:

1.您是否在web.config中定义了加密/解密的“
machineKey
”条目?如果没有,那么定义它

2.只需清除浏览器的所有cookie和缓存数据

3.如果您使用的是forms auth。您可以在捕获异常并允许用户登录并创建有效cookie时注销(将其添加到您的
global.asax


我现在明白了,不管怎样,这种模式对我来说是行不通的。。 当我使用客户端应用程序时,任何人都可以检查我程序集中的代码并解密字符串

我将执行以下操作:

  • 使用单独的控制台应用程序和私钥加密我的字符串
  • 创建一个具有私钥并可以解密字符串的Azure函数
  • 从我的客户端WPF应用程序通过SSL调用Azure函数以解密字符串

异常是从哪一行引发的?kennyzx-请查看我的更新问题您确定正在解码来自同一台机器的编码值吗?“ZG1CrjMgyQ5O1KrnbxOym5RxH071xVxFNHC3xTTBIJ05UY4MSS0JONP-ayFuChh_M6EaEhMif_j7i8yUSQ4Pkc63moEbvq34hMZGfYkazo1”值可以从不同的机器计算出来吗?它是WPF应用程序而不是web应用程序,所以我没有machineKey或global.asx。我不能在独立客户端应用程序中使用此代码吗?它在单元测试中运行时工作。
catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}