IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Stocker un hash SHA1 en base Sql Server


Sujet :

WinDev

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    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
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  2. #2
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    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
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  3. #3
    Membre confirmé

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    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 averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    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 ?
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  5. #5
    Membre confirmé

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    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
    Invité
    Invité(e)
    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
    Dernière modification par Invité ; 24/04/2017 à 15h16.

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