Bonjour,
Je développe présentement une application possédant des données sensibles cryptées via AES, et elle fonctionne bien.
Notre client nous a informés qu'il voudrait avoir une case "Se rappeler du mot de passe" dans le formulaire de connexion qui apparaît présentement à chaque démarrage du programme. Il faut donc que je crypte un mot de passe, en puissant le décrypter, de manière sécuritaire.
D'après ce que j'ai vu sur MSDN, ils recommandent d'utiliser l'algorithme RSA avec un conteneur de clé. Mais ils ne spécifient rien sur la sécurité du conteneur de clé et sur son accès.
J'ai le code suivant pour enregistrer et récupérer une clé (notez que la classe HexEncoding ne fait que convertir un byte[] en la chaîne en hexadécimal le représentant (cette chaîne est ensuite enregistrée dans les settings de l'application)). Il semble fonctionner (les tests unitaires passent).
///
<summary>/// Transforme une cl, en le cryptant via RSA.///</summary>///<param name="key">La cl, . prot,ger</param>///<returns>Le Hex-string repr,sentant les donn,es crypt,es.</returns>publicstaticstring TransformKey(string key){
CspParameters csp = newCspParameters();csp.KeyContainerName =
"MyContainer2003";byte[] bytes = Encoding.UTF8.GetBytes(key);MemoryStream source = newMemoryStream(bytes);RSACryptoServiceProvider rcsp = newRSACryptoServiceProvider(csp);string hexstring = HexEncoding.ToString(rcsp.Encrypt(bytes, false));return hexstring;}
///<summary>/// D,crypte le contenu crypt, en RSA sous le format HEX-string en la cl, de base.///</summary>///<param name="hexstring">Le HEX-string contenant les donn,es crypt,es.</param>///<returns>La cl, une fois d,crypt,e.</returns>publicstaticstring GetKeyBack(string hexstring){
CspParameters csp = newCspParameters();csp.KeyContainerName =
"MyContainer2003";RSACryptoServiceProvider rcsp = newRSACryptoServiceProvider(csp);byte[] bytes = rcsp.Decrypt(HexEncoding.GetBytes(hexstring), false);returnEncoding.UTF8.GetString(bytes);}
Notez que le nom du containeur a été modifié.
J'aimerais savoir qui peut avoir accès au conteneur de clé. Est-ce seulement mon application ou toute application connaissant son nom?
Si cela a une influence, mon programme .NET est signé.
«L'erreur est humaine mais un véritable désastre nécessite un ordinateur.»
«Selon les derniers chiffres, 43 % des statistiques sont fausses»