CryptographicException:加密操作期间发生错误

时间:2018-06-06 04:17:29

标签: 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);
        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中),为什么在单元测试中调用它?

2 个答案:

答案 0 :(得分:1)

试试这些解决方案,希望它能起作用:

1.你定义了" machineKey"在web.config中加密/解密的条目?如果没有,那么定义它。

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

3.如果您使用的是表单身份验证。您可以在捕获异常时退出并允许您的用户登录并创建有效的cookie(将其添加到您的global.asax

catch (CryptographicException cex)
{
    FormsAuthentication.SignOut();
}

答案 1 :(得分:0)

我现在明白,这种模式无论如何都不适合我。 看到我使用客户端应用程序,任何人都可以检查我的程序集中的代码并解密字符串。

我将改为执行以下操作:

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