2011-11-05 4 views
1

Mot de passe doit être égalé par Password Hash qui a été initialement créé sur une plate-forme .NET et stocké sur MSSQL (donc le cryptage est probablement SHA1).Comment répliquer le mot de passe pour le mot de passe fourni et le mot de passe (PHP/MySQL)

Voici comment table MySQL ressemble:

CREATE TABLE IF NOT EXISTS `test` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `UserName` varchar(100) COLLATE latin1_general_ci DEFAULT NULL, 
    `PasswordHash` varchar(100) CHARACTER SET utf8 DEFAULT NULL, 
    `PasswordSalt` int(10) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=12535 ; 

-- 
-- Dumping data for table `test` 
-- 

INSERT INTO `test` (`id`, `UserName`, `PasswordHash`, `PasswordSalt`) VALUES(9836, 'demoadmin', '?z1??9t|????e&??9aK', -1190254076); 
INSERT INTO `test` (`id`, `UserName`, `PasswordHash`, `PasswordSalt`) VALUES(12534, 'sunny', '??o\\(R?8~??6>?t????o', 549612932); 

J'ai trouvé deux exemples très proche de ce que je dois faire, mais j'étais permettre de le faire fonctionner.

Exemple 1: http://gilbert.pellegrom.me/replicating-net-password-hashing-in-php/

Exemple 2: http://www.kevinbruce.com/Blog?area_id=6&blog_id=3&ba_id=27

Les noms d'utilisateur et mots de passe sont:

utilisateur Première: demoadmin/demotest utilisateur Second: ensoleillé/eclyptix

S'il vous plaît aider!

Répondre

0

Il semble que vous avez un problème d'encodage:

'?z1??9t|????e&??9aK' 

Il semble que votre code d'origine était cassé et convertissait les caractères de la plage ASCII imprimable en points d'interrogation.

Vous pouvez essayer de répliquer ce comportement en PHP. Cependant continuer à utiliser ce système cassé compromettra la sécurité de votre système car il est beaucoup plus probable qu'une collision de hachage puisse être trouvée. Il peut être nécessaire de demander à tous vos utilisateurs de changer leur mot de passe. Cette fois, assurez-vous que les hachages sont stockés correctement. Vous pouvez également envisager de les stocker sous forme de chaînes hexadécimales au lieu de données binaires afin de minimiser le risque de problèmes de codage supplémentaires. Kevin Bruce ici (à partir du deuxième exemple que vous avez cité)

+0

Merci pour votre réponse Mark, je suis d'accord avec vous. Cependant, j'ai besoin de faire ce travail en tant que possible car nous avons une base de données avec de nombreux utilisateurs. Voici comment ils sont initialement stockés dans la base de données SQL Server 2008 (je dirais qu'ils sont stockés dans un format binaire) et nous devons les copier dans la base de données MySQL et le faire fonctionner avec PHP. A partir de là, nous pouvons les encoder en chaînes HEX et améliorer les choses. – crazyhorse

+0

@crazyhorse: Si vous avez de la chance, les données ont été stockées correctement dans SQL Server, et vous venez d'exporter/importer incorrectement. –

+0

Malheureusement, c'est exactement la même situation sur un serveur de production SQL Server. – crazyhorse

0

Pour ce que ça vaut, je n'ai jamais résolu le problème avec mon expérience. J'ai parlé avec Elizabeth Smith (qui travaille sur PHP core pour Windows) et elle a convenu qu'il y a une grosse déconnexion dans le support de hachage au même niveau que .NET, en raison de la prise en charge de l'encodage de caractères en PHP. C'est ce que je soupçonnais.

Questions connexes