【发布时间】:2015-12-23 19:59:34
【问题描述】:
我已经创建了一个网站和一个 Windows 窗体应用程序,它们都连接到同一个 MySQL 数据库。 windows应用程序使用参数(用户名等)向网站发出POST请求。服务器(网站)生成一对RSA公钥和私钥。私钥存储在数据库中,公钥发送给客户端(windows应用程序)。问题是当我尝试发送公钥时,它没有被发送。它会发送其他信息,例如网页的 html 代码以及公钥,我在加密时收到错误“无效语法”(显然是因为 html 代码和公钥一起发送)。我如何只提取公钥并只发送那个给客户。但我得到了这个输出:http://postimg.org/image/8kwpnl6lp/
我做错了什么。如何才能将公钥作为服务器的响应。感谢艾米的帮助,谢谢
这是我的代码:
客户端(windows 应用程序:向服务器发出 post 请求):
public partial class Form1 : Form
{
string Url = "http://localhost:8731/ckey.aspx"; //creates public key
string userName = Textbox1.TExt;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
string publicKey = getPublicKey(Url);
richTextBox1.Text =publicKey ;
}
public string getPublicKey(string url)
{
WebClient webClient = new WebClient();
NameValueCollection formData = new NameValueCollection();
formData["username"] = userName;
byte[] responseBytes = webClient.UploadValues(url, "POST", formData);
string responsefromserver = Encoding.UTF8.GetString(responseBytes);
webClient.Dispose();
return responsefromserver;
}
}
和服务器端代码(生成rsa密钥对并将公钥发送给客户端[ckey.aspx])
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string response = AssignNewKey();
Response.Write(response);
}
public string AssignNewKey()
{
string username1 =Request.Form["username"];
RSA rsa1 = new RSACryptoServiceProvider(2048);
string publicPrivateKeyXML = rsa1.ToXmlString(true);
string publicOnlyKeyXML = rsa1.ToXmlString(false);
using (MySqlConnection myConn = new MySqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString))
{
string query = "INSERT INTO securelogin (PrivateKey,username)";
query += " VALUES (@PrivateKey,@username)";
MySqlCommand myCommand = new MySqlCommand(query, myConn);
myCommand.Parameters.AddWithValue("@PrivateKey", publicPrivateKeyXML);
myCommand.Parameters.AddWithValue("@username", username1);
myConn.Open();
myCommand.ExecuteNonQuery();
myConn.Close();
}
return publicOnlyKeyXML;
}
【问题讨论】:
-
你返回了 publicOnlyKeyXML 但没有在调用方法中使用它的结果
-
我没看懂你说什么,调用方法返回值后,是否应该在Page_load中使用Response.write?
-
试过它仍然会发送其他信息,例如页面的 html 代码以及 rsa 公钥。
-
如果您通过 Response.Write 传递响应,那么您应该考虑添加 Response.End/Close。否则它也会添加页面 HTML。我们发送/下载文件也是如此。
-
只需在方法 Page_Load 中解释 - 你不想要任何东西而不是你的文本
protected void Page_Load(object sender, EventArgs e) { Response.Clear(); Response.Write("my supersecure public key"); Response.End(); }