У меня есть следующий код:аварий приложений (закрывается), даже если исключение поимки
public byte[] GenerateSignature(List<string> text_list)
{
StringBuilder text_string = new StringBuilder();
string private_key = "<RSAKeyValue><Modulus>zDYX4tbHSy....";
byte[] digital_signature = null;
for (int i = 0; i < text_list.Count; i++)
{
text_string.Append(text_list[i]);
}
try
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(private_key);
RSAPKCS1SignatureFormatter rsa_form = new RSAPKCS1SignatureFormatter(rsa);
rsa_form.SetHashAlgorithm("SHA1");
SHA1Managed sha1 = new SHA1Managed();
UnicodeEncoding encoding = new UnicodeEncoding();
byte[] data = encoding.GetBytes(text_string.ToString());
byte[] hash = sha1.ComputeHash(data);
digital_signature = rsa_form.CreateSignature(hash);
}
catch (Exception)
{
digital_signature = Encoding.Unicode.GetBytes("false");
}
return digital_signature;
}
Теперь, если я изменить символ в закрытом ключе, сбои приложений и закрывает на линии rsa.FromXmlString(private_key)
, даже если код завернут в блок catch try. С другой стороны, если я установил закрытый ключ на бессмысленное значение, такое как blablabla
, исключение поймано и обработано изящно.
Почему приложение сбой и закрытие при изменении одного символа из закрытого ключа? Например, если я изменил «<RSAKeyValue><Modulus>zDYX4tbHSy....
» на «<RSAKeyValue><Modulus>ADYX4tbHSy....
», (изменен z на A) приложение аварийно завершает работу. Приложение является приложением Windows Phone, но я думаю, что это не должно меняться.
Update
Это стек вызовов непосредственно перед тем, исключение:
MobileApp.dll MobileApp.Classes.SignatureMobile.GenerateSignature (System.Collections.Generic.List text_list) Строка 38 C# MobileApp.dll! MobileApp.StartPage.Button_LogIn_Click (отправитель объекта, System.Windows.RoutedEventArgs e) Строка 74 + 0x4 байтов C# System.Windows.dll! System.Windows.Controls.Primitives.ButtonBase.OnClick() + 0x1f байт System.Windows.dll ! System.Windows.Controls.Button.OnClick() + 0x1F байт
System.Windows.dll! System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (System.Windows.Input.MouseButtonEventArgs е) + 0x4e байт
системы .Windows.dll! System.Windows.Controls.Control.OnMouseLeftButtonUp (System.Windows.Controls.Control ctrl, System.EventArgs e) + 0xc байты
System.Windows.dll! MS.Internal.JoltHelper.FireEvent (System. IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, внутр argsTypeIndex, внутр actualArgsTypeIndex, строка именем_события) + 0x115 байт [External Code]
Предположительно у вас есть трассировка стека для аварии - что это такое? –
Какой тип исключения? –
@SriramSakthivel Я не знаю. Фактически, Visual Studio не сообщает об исключении. Приложение просто закрывается в эмуляторе, вот и все. – Matthew