System.Security.Cryptography.CryptographicException:对象已存在

本文关键字:对象 存在 CryptographicException Security Cryptography System | 更新日期: 2023-09-27 18:31:40

这很奇怪。我有这个方法来加密字符串:

[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: Object 已经 存在。

你知道这里发生了什么吗?我知道我可以授予对密钥的访问权限everyone.我要问的是服务器刚刚发生了什么?有什么变化?什么样的更改会导致问题?

System.Security.Cryptography.CryptographicException:对象已存在

我要问的是,服务器刚刚发生了什么?有什么变化?什么样的更改会导致问题?

一种可能性是最近发布的 Windows 安全更新 MS14-059,尽管我无法解释您收到的错误消息。

基本上,该更新完全卸载了MVC 4.0.0.0,并将其替换为服务器上的4.0.0.1,并且它给许多构建损坏的人带来了悲伤。由于加密可能依赖于非常特定于 DLL 版本号的内容,因此您可能希望从那里开始。您可以通过在未安装上述安全补丁的计算机上测试您的应用程序来证明或反驳此理论,以查看它是否再次开始工作。