Я пытаюсь расшифровать зашифрованный файл, однако я получаю System.ArgumentException: Illegal characters in path.
ошибка в строке 4 вышеуказанного метода (StreamReader...). Может ли кто-нибудь сказать мне, почему эта точная ошибка происходит? У меня нет пути прохождения метода, где происходит ошибка, однако путь от предыдущего метода является абсолютным путем для файла для дешифрования
Метод:
public static string AsymmDecrypt(string input, string privatekeyfilename)
{
RSACryptoServiceProvider myAlg = new RSACryptoServiceProvider();
StreamReader sr = new StreamReader(privatekeyfilename);
myAlg.FromXmlString(sr.ReadLine());
sr.Close();
byte[] cipher = myAlg.Decrypt(Convert.FromBase64String(input), true);
return UTF8Encoding.UTF8.GetString(cipher);
}
Проходящие параметры:
input = "����\0JFIF\0\0H\0H\0\0��\0C\0\b"
privatekeyfilename = "<RSAKeyValue><Modulus>2o6sUW4eEF43RK6SWyxuII0wfmhyiTXkBVX8l5J20Y5IvY10/7W3vT0RkwB/lcZUNUgOC2PG6ISJQ53PR76yybSodU9uNmYZye+eJnImP+a6SFZKMxeFESFkye5kroHc4qQ76Zyb37YcMulD214EWnyiu3gcBoA5yyOXyM8PojU=</Modulus><Exponent>AQAB</Exponent><P>7Ke13x362OFEr7VjYmpJOpC+...
Трассировки стека:
[ArgumentException: Illegal characters in path.]
System.IO.Path.CheckInvalidPathChars(String path, Boolean checkAdditional) +10631190
System.IO.Path.GetFileName(String path) +21
System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost) +82
System.IO.StreamReader..ctor(String path) +32
eLearningLTD.Securities.EncryptDecrypt.AsymmDecrypt(String input, String privatekeyfilename) in D:\Assignments\SSD\aAssignment\eLearningLTD\eLearningLTD\Securities\EncryptDecrypt.cs:211
eLearningLTD.Securities.EncryptDecrypt.HybridDecryption(String filePath, String publicKey, String privateKey) in D:\Assignments\SSD\aAssignment\eLearningLTD\eLearningLTD\Securities\EncryptDecrypt.cs:178
eLearningLTD.Controllers.ResourcesController.download(String id) in D:\Assignments\SSD\aAssignment\eLearningLTD\eLearningLTD\Controllers\ResourcesController.cs:213
lambda_method(Closure , ControllerBase , Object[] ) +180
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +14
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary'2 parameters) +214
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary'2 parameters) +27
System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +55
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func'1 continuation) +253
System.Web.Mvc.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14() +21
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList'1 filters, ActionDescriptor actionDescriptor, IDictionary'2 parameters) +191
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +324
System.Web.Mvc.Controller.ExecuteCore() +106
System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +91
System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +34
System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +19
System.Web.Mvc.Async.<>c__DisplayClass8'1.<BeginSynchronous>b__7(IAsyncResult _) +10
System.Web.Mvc.Async.WrappedAsyncResult'1.End() +62
System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +48
System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629708
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Проблема заключается в следующем: StreamReader sr = new StreamReader(privatekeyfilename);
Он ожидает путь, но вместо этого вы просто передаете свой секретный ключ.
Чтобы устранить проблему, которую вы должны заменить:
StreamReader sr = new StreamReader(privatekeyfilename);
myAlg.FromXmlString(sr.ReadLine());
sr.Close();
С
myAlg.FromXmlString(privatekeyfilename);