【发布时间】:2014-11-24 15:44:53
【问题描述】:
这很奇怪。我有这个方法来加密一个字符串:
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Assert, Unrestricted = true)]
public static string Encrypt(this string stringToEncrypt, string key) {
var cspp = new CspParameters {
KeyContainerName = key,
Flags = CspProviderFlags.UseMachineKeyStore
};
var rsa = new RSACryptoServiceProvider(cspp) {
PersistKeyInCsp = true
};
var bytes = rsa.Encrypt(System.Text.Encoding.UTF8.GetBytes(stringToEncrypt), true);
return BitConverter.ToString(bytes);
}
这是我的客户:
private const string EncryptionKey = "pezhman";
static Random random = new Random();
public static int CreateSalt() {
return random.Next(1000, 9999);
}
public void EncryptSomething() {
var salt = CreateSalt();
var plainText = salt + "," + DateTime.Now;
var encryptionSaltKey = EncryptionKey + DateTime.Now.Date;
// here im calling encryptor:
var encryptedValue = plainText.Encrypt(encryptionSaltKey);
}
我在 ASP.NET MVC 4 应用程序中使用它。它运行良好;但突然它停止工作了。实际上,在本地,我没有问题并且它有效。但是,当我将代码发布到服务器时,我收到了这个错误:
System.Security.Cryptography.CryptographicException: 对象已经 存在。
你知道这里发生了什么吗?我知道我可以grant access to the key to everyone。 我要问的是,服务器上发生了什么?有什么改变?什么样的变化会导致问题?
【问题讨论】:
-
你已经看过这个了吗? stackoverflow.com/questions/11430966/…
-
@rodrigogq 是的,我已经在我的问题中提到了这一点。我想知道服务器发生了什么?什么样的变化会导致问题?
-
对不起,我之前没有点击链接。提供一些背景信息:您刚刚更改了您的应用程序吗?安装了任何 Windows 更新,什么 IIS?您的 AppPool 是使用任何特定用户还是默认用户?有人改过吗?
-
@rodrigogq 好吧,这就是问题所在。因为我不知道而且我的托管公司没有回答!另外,我改变了密钥,问题解决了。但是,我仍然想知道刚刚发生了什么!无论如何,感谢 cmets。祝你好运
标签: c# asp.net-mvc asp.net-mvc-4 c#-4.0 cryptography