7
votes

Comment chiffrer la colonne de mot de passe

J'ai une table utilisateur dans SQL Server 2008 R2. Rien, il n'y a pas encore crypté mais je voudrais au moins crypter les mots de passe jusqu'à ce que l'application soit prête à gérer cela mieux. Puis-je faire cela et comment? faire manuellement les mots de passe cryptés.


0 commentaires

6 Réponses :


-5
votes

Vous ne devez pas chiffrer les mots de passe si votre seule tâche consiste à vérifier que le mot de passe entré est correct. Vous devriez les hacher à la place. Vous pouvez utiliser n'importe quel algorithme pour les hacher, mais je recommande d'utiliser MD5 car il est très sécurisé. 1 sup> :)

Par exemple: P>

public string EncodePassword(string originalPassword)
{
//Declarations
Byte[] originalBytes;
Byte[] encodedBytes;
MD5 md5;

//Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash    (encoded password)
md5 = new MD5CryptoServiceProvider();
originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
encodedBytes = md5.ComputeHash(originalBytes);

//Convert encoded bytes back to a 'readable' string
return BitConverter.ToString(encodedBytes);
}


5 commentaires

N'utilisez pas de MD5, ce n'est pas sécurisé. La création de collision fiable fonctionne depuis un certain temps. SHA1 est également cassé, mais la création de collision prend plus de temps. Si vous voulez un algorithme de hachage sécurisé, utilisez SHA2. C'est fiable, du moins pour le moment.


MD5 est cassé et n'est pas conseillé d'utiliser.


MD5 n'est pas "très secureur". Si vous êtes préoccupé par la sécurité, utilisez un algorithme SHA-256 et un sel.


Cela dépend des besoins de sécurité, je pense que MD5 est suffisant sur 90% des cas et il est vraiment facile à utiliser.


SHA1 et SHA2 sont facilement utilisables et bien plus en sécurité.



10
votes

Vous pouvez chiffrer des colonnes à l'aide de SQL Server (voir: http://msdn.microsoft.com/ EN-US / Bibliothèque / MS179331.aspx pour une promenade).

Vous pouvez également utiliser une clé donnée sur le serveur lui-même.

Le risque d'utilisation de ceci est si vous deviez faire une récupération de données et déplacer le DB sur un autre serveur, il serait impossible de déchiffrer la colonne (réinitialiser les mots de passe serait requis).


0 commentaires

6
votes

Remarque: Le hachage de mot de passe n'est pas destiné au cryptage à deux voies (où un dba rogue peut le déchiffrer). Il est destiné à le hacher de manière à permettre la validation sans montrer de manière triviale le mot de passe à personne. Un niveau de collision faible ou même modéré est à certains égards désirable afin qu'il permet au mot de passe (et malheureusement d'autres variantes) mais avec des collisions Vous ne pouvez jamais dire ce que le mot de passe réel était réellement.


Une implémentation simple serait d'exécuter des hashbytes sur le mot de passe. Vous comparez le mot de passe (hachage de) fourni sur le hachage stocké. À moins que quelqu'un ait une table arc-en-ciel prête, ils ne pourront pas trouver le mot de passe d'origine. xxx

Lors de la validation des mots de passe, vous prenez le hachage du mot de passe < Pré> xxx

et comparez-le contre l'entrée.


2 commentaires

Il y a des faiblesses mathématiques avec SHA-1. S'il vous plaît utiliser SHA-2. en.wikipedia.org/wiki/shaa-2


Lorsque la balise SQL-Server-2008 est supprimée, vous pouvez utiliser SHA-2, mais pas auparavant. MSDN.MicRosoft.com/en-us/ Bibliothèque / MS174415% 28V = SQL.105% 29.Ap x



0
votes

Les exemples de chiffrement et de déchiffrement peuvent être trouvés ici:

http://msdn.microsoft.com/en-us/library/ MS179331.aspx

L'exemple de hachage peut être trouvé ici:

http://msdn.microsoft.com/en-us/library/ MS174415.aspx


0 commentaires

4
votes

Vous ne voulez réellement pas crypter, mais utilisez plutôt une fonction de hachage dessus. Sauf exigence forte d'avoir accès au mot de passe non crypté.


0 commentaires

2
votes

Nous pouvons créer une seule fonction SQL simple pour chiffrer et déchiffrer la colonne de mot de passe de votre page Web:

Code: Cryptage STR FORT> P>

`CREATE FUNCTION [dbo].[DECRYPT] 
( 
   @DB_ROLE_PASSWORD VARCHAR(MAX)
)
RETURNS VARCHAR(MAX)
AS 

   BEGIN

      DECLARE
         @STR_LEN NUMERIC(10), 
         @DECRYPTED_PASSWORD VARCHAR(100), 
         @TRIAL_CHARACTER VARCHAR(1), 
         @TRIAL_NUMBER NUMERIC(4), 
         @CHECK_CHARACTER VARCHAR(1), 
         @V_DB_ROLE_PASSWORD VARCHAR(100)

      SET @V_DB_ROLE_PASSWORD = @DB_ROLE_PASSWORD

      SET @DECRYPTED_PASSWORD = NULL

      SET @STR_LEN = LEN(@V_DB_ROLE_PASSWORD)

      DECLARE
         @I INT

      SET @I = 1

      DECLARE
         @LOOP$BOUND INT

      SET @LOOP$BOUND = @STR_LEN

      WHILE @I <= @LOOP$BOUND

         BEGIN

            /*
            *   SSMA WARNING MESSAGES:
            *   O2SS0273: ORACLE SUBSTR FUNCTION AND SQL SERVER SUBSTRING FUNCTION MAY GIVE DIFFERENT RESULTS.
            */

            SET @TRIAL_CHARACTER = SUBSTRING(@V_DB_ROLE_PASSWORD, @I, 1)

            SET @TRIAL_NUMBER = ASCII(@TRIAL_CHARACTER) - @I

            IF (@TRIAL_NUMBER % 2) = 0
               SET @TRIAL_NUMBER = @TRIAL_NUMBER + 6
            /*-IE EVEN*/
            ELSE 
               SET @TRIAL_NUMBER = @TRIAL_NUMBER + 8
            /*-IE ODD*/

            SET @DECRYPTED_PASSWORD = ISNULL(@DECRYPTED_PASSWORD,'') + ISNULL(CHAR(CAST(@TRIAL_NUMBER AS INT)), '')

            SET @I = @I + 1

         END

      RETURN @DECRYPTED_PASSWORD

   END`


0 commentaires