J'ai créé un site Web et une application Windows Forms tous deux connectés à la même base de données MySQL. L'application Windows fait une requête POST au site Web avec des paramètres (nom d'utilisateur, etc.) Le serveur (site Web) génère une paire de clé publique RSA et de clé privée.La clé privée est stockée dans la base de données et la clé publique est envoyée au client (Windows Le problème est que lorsque j'essaie d'envoyer la clé publique, elle n'est pas envoyée. Il envoie d'autres informations comme le code html de la page Web avec la clé publique et j'obtiens l'erreur "Syntaxe invalide" lors du cryptage (évidemment à cause du code html avec la clé publique envoyée). Comment extraire uniquement la clé publique et n'envoyer que cela au client. Mais j'obtiens cette sortie: http://postimg.org/image/8kwpnl6lp/

Qu'est-ce que je fais mal. Comment puis-je obtenir la clé publique uniquement en réponse à l'aide de server.amy, merci

Voici mon code:

Côté client (application Windows: faire une demande de publication au serveur):

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;
    }
}

Et le code côté serveur (génère une paire de clés rsa et envoie la clé publique au client [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;   
}
1
panman 23 déc. 2015 à 10:30

2 réponses

Meilleure réponse

Si vous transmettez la réponse par Response.Write, vous devriez envisager d'ajouter Response.End/Close. la même chose que nous faisons pour send/download fichier.
sinon, il rendra la page et ajoutera également du code HTML à la page.

1
par 23 déc. 2015 à 11:59

Vous devriez utiliser quelque chose comme WebService (.asmx)

Lisez ce tutoriel: http://www.tutorialspoint.com/asp.net/asp.net_web_services.htm

-1
Levent Esen 23 déc. 2015 à 08:42