gpt4 book ai didi

c# - 即使异常被捕获,应用程序也会崩溃(关闭)

转载 作者:行者123 更新时间:2023-11-30 17:03:50 25 4
gpt4 key购买 nike

我有以下代码:

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) 行关闭即使代码包含在 try catch block 中。另一方面,如果我将私钥设置为无意义的值,例如 blablabla , 异常被捕获并被优雅地处理。

为什么当我从私钥更改单个字符时应用程序崩溃并关闭?例如,如果我将“<RSAKeyValue><Modulus>zDYX4tbHSy....”更改为“<RSAKeyValue><Modulus>ADYX4tbHSy....”(将 z 更改为 A),应用程序将崩溃并关闭。该应用程序是 Windows Phone 应用程序,但我想这应该不会有什么不同。

更新

这是抛出异常之前的调用堆栈:

MobileApp.dll!MobileApp.Classes.SignatureMobile.GenerateSignature(System.Collections.Generic.List text_list) Line 38 C# MobileApp.dll!MobileApp.StartPage.Button_LogIn_Click(object sender, System.Windows.RoutedEventArgs e) Line 74 + 0x4 bytes C# System.Windows.dll!System.Windows.Controls.Primitives.ButtonBase.OnClick() + 0x1f bytes System.Windows.dll!System.Windows.Controls.Button.OnClick() + 0x1f bytes
System.Windows.dll!System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(System.Windows.Input.MouseButtonEventArgs e) + 0x4e bytes
System.Windows.dll!System.Windows.Controls.Control.OnMouseLeftButtonUp(System.Windows.Controls.Control ctrl, System.EventArgs e) + 0xc bytes
System.Windows.dll!MS.Internal.JoltHelper.FireEvent(System.IntPtr unmanagedObj, System.IntPtr unmanagedObjArgs, int argsTypeIndex, int actualArgsTypeIndex, string eventName) + 0x115 bytes [External Code]

最佳答案

我认为您刚刚发现了一个错误。我假设键值被解析,然后传递给底层的 native 库。该错误在底层库或围绕它的包装函数中没有得到妥善处理。请注意,当您将私钥从 z 更改为 A 时,您已经稍微更改了模数长度。模数大小现在不同于 key 大小。这可能没有经过很好的测试。

恭喜你:)

关于c# - 即使异常被捕获,应用程序也会崩溃(关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18159752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com