Bonjour,

J'ai crée une application C# qui est un forum.

Un utilisateur est invité à saisir son username + mot de passe via une interface graphique.

Volontairement, j'ai choisi de stocker le mot de passe au format Varbinary car il doit être crypté quand il est inséré dans la BDD.


Ces données sont insérées ensuite dans la BDD sql serveur dans la table Forum_Registration

Voici le code d'insertion des données

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
 
 protected void Btn_Registration_Click(object sender, EventArgs e)
        {
            try
            {
 
                using (SqlConnection connexion = new SqlConnection(ConnectionStrings.FrCon))
                {
                    //on remplace  txtusername.Text et txtpassword.Text , txtfullname.Text , @rbl_gender.SelectedItem.Text,txtdob.Text,txtemailid.Text par le nom d'un paramètre 
 
                    sqlquery = "Insert into Forum_Registration values (@username , @password)";
 
                    sqlCommand = new SqlCommand(sqlquery, connexion);
 
 
 
                    //création et déclaration des paramètres @username, @password,@fullname,@rbl_gender,@txtdob,@emailid
                    sqlCommand.Parameters.Add(new SqlParameter("@username", SqlDbType.NVarChar));
                    //insérer un message de saisie selon une expression régulière 
 
                    sqlCommand.Parameters.Add(new SqlParameter("@password", SqlDbType.VarBinary));
 
 
                    //attribution de valeur aux paramètres 
                    sqlCommand.Parameters["@username"].Value = txtusername.Text;
 
                    //pour l'instant je ne crypte et décrypte qu'en appelant des procédures sql serveur
                    //appel de la procédure stockée 
 
 
 
                    sqlCommand.Parameters["@password"].Value = txtpassword.Text;
 
 
                    //ouverture de la connexion 
                    connexion.Open();
 
                    sqlCommand.ExecuteNonQuery();
 
                }//fin de using
 
            }//fin de try
Au niveau BDD, j'ai crée :
-une procédure de création de clef symétrique

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
CREATE SYMMETRIC KEY MA_CLEF
WITH ALGORITHM = AES_256 
ENCRYPTION BY PASSWORD = 'P@ssw0rd !';
Voici le code du trigger d'insertion du mot de passe crypté dans la BDD

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
CREATE TRIGGER E_I_IU_Forum_Registration
ON [dbo].[V_Forum_Registration]
INSTEAD OF INSERT, UPDATE
AS
BEGIN
IF NOT EXISTS(SELECT * FROM deleted)
   INSERT INTO Forum_Registration(username, password)
   SELECT username, ENCRYPTBYKEY(KEY_GUID('MA_CLEF'), password)
   FROM   inserted;
ELSE
   UPDATE FR
   SET    password = ENCRYPTBYKEY(KEY_GUID('MA_CLEF'), i.password)
   FROM   inserted AS i JOIN Forum_Registration AS FR
	ON i.username = FR.username;
END
-une vue sql dont voici le code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
CREATE VIEW [dbo].[V_Forum_Registration]
AS
SELECT username, CAST(DECRYPTBYKEY(password) AS VARCHAR(100)) AS password
FROM   [dbo].[Forum_Registration];
Cette création de vue implique que les données soient au format Varbinary dans la BDD, ce qui n'est pas le cas .

Je vous remercie beaucoup de votre aide pour résoudre cette situation bloquante.

Bien cordialement.

new_wave