System.Security.Cryptography.CryptographicException: 系統找不到指定的文件

最近,研究RSA加密解密時,出現一個Bug。

是這樣的,在遠程測試接口時,需要進行RSA數據解密。

RSA解密代碼如下:

/// <summary>
        /// RSA解密
        /// </summary>
        /// <param name="encryptData">經過Base64編碼的密文</param>
        /// <param name="privateKey">私鑰</param>
        /// <returns>RSA解密後的數據</returns>
        public static string decrypt(string encryptData, string privateKey)
        {
            string decryptData = "";
            try
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                provider.FromXmlString(privateKey);
                byte[] bEncrypt = Convert.FromBase64String(encryptData);                
                int length = bEncrypt.Length;
                int offset = 0;
                string cache ;
                int i = 0;
                while (length - offset > 0)
                {
                    if (length - offset > MAXDECRYPTSIZE)
                    {
                        cache = Encoding.UTF8.GetString(provider.Decrypt(getSplit(bEncrypt, offset, MAXDECRYPTSIZE), false));
                    }
                    else
                    {
                        cache = Encoding.UTF8.GetString(provider.Decrypt(getSplit(bEncrypt, offset, length - offset), false));
                    }
                    decryptData += cache;
                    i++;
                    offset = i*MAXDECRYPTSIZE;
                }
            }
            catch(Exception e)
            {
                throw e;
            }
            return decryptData;
        }

在進行本地調試或者是發佈到本地IIS上,加密解密一切正常,但是,一把服務發佈到遠程服務器上時,在進行解密,卻提示如下錯誤:

System.Security.Cryptography.CryptographicException:系統找不到指定的文件。 

在 Util.Security.RSAUtils.decrypt(String encryptData,String privateKey) 位置 D:\documents\visual studio2010\Projects\MSPJK\MSPJK\RSAUtils.cs:行號 175 

在MSPJK.DAO.DAO.login(loginInfo loginInfo) 位置 D:\documents\visualstudio 2010\Projects\MSPJK\MSPJK\DAO.cs:行號 2052

在找了許多資料後算是解決了。解決辦法如下:

將代碼中:

RSACryptoServiceProvider provider = new RSACryptoServiceProvider();

改爲:

CspParameters RSAParams = new CspParameters();
RSAParams.Flags = CspProviderFlags.UseMachineKeyStore;
System.Security.Cryptography.RSACryptoServiceProvider provider = new RSACryptoServiceProvider(1024, RSAParams);

再進行測試,OK了!

參考:http://www.verydemo.com/cm.jsp?c=66&u=systemsecuritycryptographycryptographicexception-xi-tong-zhao-bu-dao-zhi-ding-de-wen-jian-jie-jue-ban-fa-zhuan

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章