2010-03-26 6 views
0

Je souhaite que mon application crypte un mot de passe d'utilisateur et, à un moment donné, le mot de passe sera déchiffré pour être envoyé au serveur pour authentification. Un ami me conseille d'utiliser HMAC. J'ai écrit le code suivant dans C#:Problème d'implémentation C# HMAC

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
byte[] key = encoding.GetBytes("secret"); 
HMACSHA256 myhmacsha256 = new HMACSHA256(key); 
byte[] hashValue = myhmacsha256.ComputeHash(encoding.GetBytes("text")); 
string resultSTR = Convert.ToBase64String(hashValue); 
myhmacsha256.Clear(); 

Comment décoder le mot de passe (resultSTR, dans ce cas)?

Merci.

Répondre

5

Un HMAC (code d'authentification de hachage) n'est pas un cryptage, c'est une fonction de hachage (dans ce cas, SHA-256) plus une clé secrète. C'est une perte, il n'y a aucun moyen de dériver le texte en clair à partir du HMAC.

Si vous souhaitez crypter certaines données secrètes, vous devriez envisager d'utiliser la classe ProtectedData à la place. Plus infom contenant un exemple de code à http://msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.aspx

+0

Comment envoyer des données protégées à un serveur? – dtb

+0

En supposant que les ordinateurs sont dans le même domaine, vous pouvez simplement envoyer le blob retourné par ProtectedData et avoir le même compte déchiffrer le blob. tout est transparent :) l'un des objectifs de conception de l'API de protection des données (DPAPI) dans Windows, est d'avoir un blob assis nu sur Internet et toujours être protégé. :) –