1. #1
    Membre habitué Avatar de droliprane
    Homme Profil pro
    Inscrit en
    mai 2005
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 549
    Points : 198
    Points
    198

    Par défaut Stocker un hash SHA1 en base Sql Server

    Bonjour à tous,
    j'essaye d'améliorer la sécurité au niveau de mon appli et notamment au niveau de l'encodage des passwords.
    Je veux stocker une chaine représentative d'un hash SHA1, obtenu comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferVersHexa(HashChaîne(HA_SHA_160,SAI_password))
    et qui ressemble à ça quand je fais un trace :

    DC 76 E9 F0 C0 00 6E 8F 91 9E 0C 51 5C 66 DB BA<\r><\n>39 82 F7 85
    Il y a en effet ce <\r><\n> qui fait que je me retrouve en BD avec ceci dans mon champs varchar(max) :

    DC 76 E9 F0 C0 00 6E 8F 91 9E 0C 51 5C 66 DB BA
    3
    D'un autre côté j'ai un frontend php qui me permet de me connecter à une ihm light de consultation, qui interroge avec le sha1 sous cette forme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TOP 1 usr_id FROM usr WHERE usr_pwd_crypte = 'dc76e9f0c0006e8f919e0c515c66dbba3982f785' AND usr_actif=1;

    Donc je dois faire en sorte que mon appli Windev sache générer dans ma base Sql Server un hash au même format.

    Qu'est-ce que j'oublie de faire ?

    Merci à vous

  2. #2
    Membre habitué Avatar de droliprane
    Homme Profil pro
    Inscrit en
    mai 2005
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 549
    Points : 198
    Points
    198

    Par défaut

    Bon alors comme souvent je me réponds à moi-même

    Il faut formatter l'affichage du BufferVersHexa pour qu'il ne fasse des sauts de ligne que tous les N octets

    J'ai mis 30 pour être tranquille, mais un hash SHA1 fait 160bits soit 20 octets.

    Et puis j'ai supprimé les espaces internes pour que mon hash ait la même forme que ce que php me génère avec la fonction sha1 classique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Minuscule(ChaîneSupprime(BufferVersHexa(HashChaîne(HA_SHA_160, SAI_password), 1, 30)," "))
    Il y a surement plus simple, je ne suis pas un grand ami des conversions binaires/hexa avec la complexité ajoutée par l'encodage des caractères en ansi, unicode... mais bon ça semble fonctionner

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    mars 2002
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 1 067
    Points : 556
    Points
    556

    Par défaut

    Nous avons un traitement identique pour le client chez lequel j'interviens.
    Il n'y a pas que les retours à la ligne qui posent problème dans le hashage. Selon la clé utilisée il y a aussi des caractères différents de lettres ou de chiffres.

  4. #4
    Membre habitué Avatar de droliprane
    Homme Profil pro
    Inscrit en
    mai 2005
    Messages
    549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mai 2005
    Messages : 549
    Points : 198
    Points
    198

    Par défaut

    Citation Envoyé par Delphi-ne Voir le message
    Nous avons un traitement identique pour le client chez lequel j'interviens.
    Il n'y a pas que les retours à la ligne qui posent problème dans le hashage. Selon la clé utilisée il y a aussi des caractères différents de lettres ou de chiffres.
    Donc cette solution n'est pas viable ?

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    mars 2002
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 1 067
    Points : 556
    Points
    556

    Par défaut

    Voilà un exemple.
    Une fois la chaine haschée on la balaie caractère par caractère et on stocke sa conversion

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            LC_Hash = sha.ComputeHash(PC_Hash)
            Dim LC_Result As String = ""
            For Each b As Byte In LC_Hash
                LC_Result += b.ToString("x2")
            Next

    J'espère que cela vous aidera.

  6. #6
    Membre éclairé Avatar de romulus001
    Homme Profil pro
    Développeur VB.NET et Windev (21) sur produits SAGE
    Inscrit en
    mai 2009
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur VB.NET et Windev (21) sur produits SAGE

    Informations forums :
    Inscription : mai 2009
    Messages : 799
    Points : 890
    Points
    890

    Par défaut

    Bonjour,

    Vous pouvez gérer le hashage dans SQL Server.

    Petit exemple de batch :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    declare @MaTable table(
    	hashValue binary(20)
    )
     
    insert into @MaTable(hashValue) values
    (HASHBYTES('SHA1', 'Testing')), 
    (HASHBYTES('SHA1', 'This is a test'))
    select * from @MaTable

    Le retour que j'ai :
    0x0820B32B206B7352858E8903A838ED14319ACDFD
    0xA54D88E06612D820BC3BE72877C74F257B561B19
    PS: à noter qu'il faut bien préciser que le champ hashValue est de longueur 20, sinon, il sera de type binary(1)

    EDIT : j'ai trouvé cet article qui est super intéressant, où il est question de saler le mot de passe
    Chat alors!

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

Discussions similaires

  1. [c#] Connection impossible à la base SQL Server
    Par cedgov dans le forum ASP.NET
    Réponses: 8
    Dernier message: 16/05/2005, 07h37
  2. formualaire access pour gerer bases sql server
    Par attavus dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 25/04/2005, 11h01
  3. Backup et restore d'une base SQL Server
    Par ZeKlubb dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/03/2005, 18h17
  4. attaquer base sql server avec easyphp sous windows
    Par jarod71 dans le forum MS SQL-Server
    Réponses: 7
    Dernier message: 11/12/2003, 14h17
  5. Comment se connecter à une base SQL server
    Par zapia dans le forum MS SQL-Server
    Réponses: 7
    Dernier message: 22/10/2003, 17h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo