Hallo,
ich bin gerade dabei, ein WebPart für eine Sharepoint-Anwendung zu programmieren.
Problem ist dabei, dass das WebPart einen Verbindungs-String von einem Web-Service beziehen soll. Dabei soll das WebPart dem Web-Service einen öffentlichen RSA-Schlüssel übergeben und erhält dann den verschlüsselten Connection-String zurück.
Für diesen Zweck wird im WebPart ein RSACryptoServiceProvider erstellt, der dann seine Parameter ausliest und dem WebService übergibt (ursprünglich auch mal mit der toXMLString-Methode versucht). Im Web-Service wird dann mit den Parametern ein neues RSACRyptoServiceProvider erstellt, verschlüsselt und zurückgeschickt und im WebPart entschlüsselt.
Soweit, so gut, das klappt auch. Aber plötzlich kommt später immer eine CryptographicException, die mir sagt: "Der Schlüsselsatz ist nicht vorhanden". Dabei wird weder gesagt, in welcher Zeile, noch welches Objekt es ausgelöst hat. Hat so was jemand mal gesehen oder weiß etwas? Hier noch mal ein bisschen Code dazu:
WebPart-Methode zum Verschlüsseln:
Web-Servcice - Methode
ich bin gerade dabei, ein WebPart für eine Sharepoint-Anwendung zu programmieren.
Problem ist dabei, dass das WebPart einen Verbindungs-String von einem Web-Service beziehen soll. Dabei soll das WebPart dem Web-Service einen öffentlichen RSA-Schlüssel übergeben und erhält dann den verschlüsselten Connection-String zurück.
Für diesen Zweck wird im WebPart ein RSACryptoServiceProvider erstellt, der dann seine Parameter ausliest und dem WebService übergibt (ursprünglich auch mal mit der toXMLString-Methode versucht). Im Web-Service wird dann mit den Parametern ein neues RSACRyptoServiceProvider erstellt, verschlüsselt und zurückgeschickt und im WebPart entschlüsselt.
Soweit, so gut, das klappt auch. Aber plötzlich kommt später immer eine CryptographicException, die mir sagt: "Der Schlüsselsatz ist nicht vorhanden". Dabei wird weder gesagt, in welcher Zeile, noch welches Objekt es ausgelöst hat. Hat so was jemand mal gesehen oder weiß etwas? Hier noch mal ein bisschen Code dazu:
WebPart-Methode zum Verschlüsseln:
Code:
WebService.SharePointWebPart webService = new WebService.Service(); webService.Url = this.getAppSetting("WebPartGridNew.APWebServices.SharePointWebPart"); RSACryptoServiceProvider prov = new System.Security.Cryptography.RSACryptoServiceProvider(); RSAParameters para = prov.ExportParameters(false); webService.UseDefaultCredentials = true; //para. webService.SoapVersion = System.Web.Services.Protocols.SoapProtocolVersion.Soap12; byte[] conn = null; try { //etwas seltsame Parameterübergabe, der Webservice weigert sich aber, structs anständig anzunehmen, also dieser Behelf conn = webService.getString(info.table, para.D, para.DP, para.DQ, para.Exponent, para.InverseQ, para.Modulus, para.P, para.Q); } catch (Exception e) { System.Console.Write(e.Message); } string connFertig=(System.Text.Encoding.Default.GetString(prov.Decrypt(conn,false))); prov = null; para.D = null; para.DP = null; para.DQ = null; para.Exponent = null; para.InverseQ = null; para.Modulus = null; para.P = null; para.Q = null; return connFertig;
Web-Servcice - Methode
Code:
[WebMethod] public byte[] getString(string table, byte[] D, byte[] DP, byte[] DQ,byte[] Exponent, byte[] InverseQ, byte[] Modulus, byte[] P, byte[] Q) { byte[] objResult=null; string ConnectionString = "data source=jgreivingmobil;initial catalog=P2PlusDemo;user id=sa;password=xxl23456;Connect Timeout=60"; RSACryptoServiceProvider rsaCryptoServiceProvider; RSAParameters para; try { rsaCryptoServiceProvider = new RSACryptoServiceProvider(); para = new RSAParameters(); para.D = D; para.DP = DP; para.DQ = DQ; para.Exponent = Exponent; para.InverseQ = InverseQ; para.Modulus = Modulus; para.P = P; para.Q = Q; rsaCryptoServiceProvider.ImportParameters(para); objResult = rsaCryptoServiceProvider.Encrypt(System.Text.Encoding.Default.GetBytes(ConnectionString), false); rsaCryptoServiceProvider = null; para.D = null; para.DP = null; para.DQ = null; para.Exponent = null; para.InverseQ = null; para.Modulus = null; para.P = null; para.Q = null; rsaCryptoServiceProvider.to return objResult; } catch (Exception e) { System.Console.Write(e.Message); } return null; }
Comment