我想在运行时在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);
}
但是我得到了
在我的WPF应用程序中运行Unprotect命令时出现CryptographicException:加密操作期间发生错误
错误。有什么想法吗?
- 如果上面的代码仅用于在Web应用程序中工作(即不在WPF中),为什么在单元测试中调用它?
答案 0 :(得分:1)
试试这些解决方案,希望它能起作用:
1.你定义了" machineKey
"在web.config中加密/解密的条目?如果没有,那么定义它。
2.清除所有浏览器的cookie和缓存数据。
3.如果您使用的是表单身份验证。您可以在捕获异常时退出并允许您的用户登录并创建有效的cookie(将其添加到您的global.asax
)
catch (CryptographicException cex)
{
FormsAuthentication.SignOut();
}
答案 1 :(得分:0)
我现在明白,这种模式无论如何都不适合我。 看到我使用客户端应用程序,任何人都可以检查我的程序集中的代码并解密字符串。
我将改为执行以下操作: