Как скопировать хэш пароля для предоставленного пароля и соли (PHP / MySQL) - PullRequest
1 голос
/ 05 ноября 2011

Пароль должен совпадать с паролем Hash, который был изначально создан на платформе .NET и сохранен на MSSQL (поэтому шифрование, вероятно, SHA1).

Вот как выглядит таблица MySQL:

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);

Я нашел два очень близких примера того, что мне нужно сделать, но у меня была возможность заставить его работать.

Пример 1: http://gilbert.pellegrom.me/replicating-net-password-hashing-in-php/

Пример 2:http://www.kevinbruce.com/Blog?area_id=6&blog_id=3&ba_id=27

Имена пользователей и пароли:

Первый пользователь: demoadmin / demotest Второй пользователь: sunny / eclyptix

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 24 мая 2013

Кевин Брюс здесь (из второго примера, который вы привели).

Несмотря на то, что он стоит, мне никогда не удавалось решить проблему с моим опытом.Я на самом деле говорил с Элизабет Смит (которая работает над ядром PHP для Windows), и она согласилась, что существует большая разница в поддержке хеша на том же уровне, что и .NET, из-за поддержки кодировки символов в PHP.Это то, что я подозревал.

0 голосов
/ 05 ноября 2011

Похоже, у вас проблема с кодировкой:

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

Похоже, ваш исходный код был сломан и преобразовывал символы из диапазона ASCII для печати в знаки вопроса.

Вы можете попытаться повторить это поведение в PHP. Однако дальнейшее использование этой неработающей схемы поставит под угрозу безопасность вашей системы, так как гораздо более вероятно, что может быть найдено столкновение хешей. Может потребоваться, чтобы все ваши пользователи изменили свои пароли. На этот раз убедитесь, что хеши хранятся правильно. Вы также можете рассмотреть возможность их хранения в виде шестнадцатеричных строк вместо двоичных данных, чтобы минимизировать риск дальнейших проблем с кодированием.

...