Member 12666574 Ответов: 0

Как работает шифрование RSA после публикации веб - сайта


У меня есть веб-сайт, использующий RSA для шифрования некоторых данных. когда я запускаю его на локальном хосте, функция RSA работает правильно. Но после публикации моего веб-сайта функция выдает мне ошибку. вызов функции-это
Cryptography encryptor = new Cryptography();
string pkpath = Server.MapPath("publickey.xml");
byte[] RSAcipher = encryptor.RSAEncryptData(RSAplain, pkpath);



трассировка стека ошибки выглядит следующим образом
Server Error in '/' Application.<br />
Object already exists.<br />
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. <br />
<br />
Exception Details: System.Security.Cryptography.CryptographicException: Object already exists.<br />
<br />
<br />
Source Error: <br />
<br />
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.<br />
<br />
Stack Trace: <br />
<br />
<br />
[CryptographicException: Object already exists.<br />
]<br />
   System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr) +36<br />
   System.Security.Cryptography.Utils._CreateCSP(CspParameters param, Boolean randomKeyContainer, SafeProvHandle& hProv) +0<br />
   System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer) +234<br />
   System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle) +69<br />
   System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair() +92<br />
   System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize) +173<br />
   Cryptography.AssignParameter() +109<br />
   Cryptography.RSADecryptData(Byte[] data2Decrypt, String prpath) +12<br />
   CryptoStegoApp.mywebapp.extbtn_Click(Object sender, EventArgs e) +546<br />
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9815014<br />
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +204<br />
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +12<br />
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +15<br />
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35<br />
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1639


Что я уже пробовал:

а код функции RSAEncryptData() таков
public  void AssignParameter()
    {
        const int PROVIDER_RSA_FULL = 1;
        const string CONTAINER_NAME = "SpiderContainer";
        CspParameters cspParams;
        cspParams = new CspParameters(PROVIDER_RSA_FULL);
        cspParams.KeyContainerName = CONTAINER_NAME;
        cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
        cspParams.ProviderName = "Microsoft Strong Cryptographic Provider";
        rsa = new RSACryptoServiceProvider(cspParams);
      }

    public  byte[] RSAEncryptData(byte[] data2Encrypt,string pkpath)
    {
        AssignParameter();
        StreamReader reader = new StreamReader(@pkpath);
        string publicOnlyKeyXML = reader.ReadToEnd();
        rsa.FromXmlString(publicOnlyKeyXML);
        reader.Close();

        //read plaintext, encrypt it to ciphertext

        //byte[] plainbytes = System.Text.Encoding.UTF8.GetBytes(data2Encrypt);
        byte[] cipherbytes = rsa.Encrypt(data2Encrypt, false);

        //return Convert.ToBase64String(cipherbytes);
        return cipherbytes;
    }

  public  byte[] RSADecryptData(byte[] data2Decrypt,string prpath)
    {
        AssignParameter();

        //byte[] getpassword = Convert.FromBase64String(data2Decrypt);

        StreamReader reader = new StreamReader(@prpath);
        string publicPrivateKeyXML = reader.ReadToEnd();
        rsa.FromXmlString(publicPrivateKeyXML);
        reader.Close();

        //read ciphertext, decrypt it to plaintext
        byte[] plain = rsa.Decrypt(data2Decrypt, false);
        //return System.Text.Encoding.UTF8.GetString(plain);
        return plain;

    }

0 Ответов