2011-11-05 1 views
1

암호는 원래 .NET 플랫폼에서 만들어지고 MSSQL에 저장되어있는 암호 해시로 일치해야합니다 (암호화는 아마도 SHA1입니다). 내가 할 필요가 무엇인지에 두 개의 매우 가까운 사례를 발견했습니다하지만 난 그것이 작동되도록 할 수 있었다제공된 암호와 소금에 대한 암호 해시 복제 방법 (PHP/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); 

: 여기

처럼 MySQL의 테이블 모습입니다.

예 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 두 번째 사용자 : 맑은/eclyptix

도와주세요!

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

원래의 코드가 파손되고 물음표로 인쇄 할 수있는 ASCII 범위를 벗어나 문자를 변환 한 것으로 보인다 :

답변

0

그것은 당신이 인코딩 문제가있는 것 같습니다.

PHP에서이 동작을 복제 해보십시오. 그러나이 끊어진 구성표를 계속 사용하면 시스템의 보안이 손상 될 수 있으므로 해시 충돌을 발견 할 가능성이 훨씬 높아집니다. 모든 사용자가 자신의 암호를 변경하도록 할 필요가있을 수 있습니다. 이번에는 해시가 올바르게 저장되었는지 확인하십시오. 추가 인코딩 문제의 위험을 최소화하기 위해 이진 데이터 대신 16 진수 문자열로 저장하는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. Mark, 귀하 동의합니다. 그러나 많은 사용자가있는 기존 데이터베이스가있는 경우 가능하면이 작업을 수행해야합니다. 이것은 원래 SQL Server 2008 데이터베이스에 저장되어있는 방법입니다 (바이너리 형식으로 저장되어 있다고 가정합니다). 그리고이를 MySQL 데이터베이스에 복사하여 PHP와 함께 사용해야합니다. 그 시점부터 16 진수 문자열로 인코딩하고 개선 할 수 있습니다. – crazyhorse

+0

@crazyhorse : 운이 좋으면 데이터가 SQL Server에 올바르게 저장되었으며 잘못 내보내거나 가져 왔습니다. –

+0

불행히도 SQL Server 프로덕션 서버에서도 똑같은 상황입니다. – crazyhorse

0

여기 Kevin Bruce (인용 한 두 번째 예에서).

가치가있는 것을 위해, 나는 나의 경험으로 해결 된 문제를 결코 얻지 못했습니다. 필자는 실제로 Elizabeth Smith (Windows 용 PHP 코어에서 작업)와 통화했으며 PHP에서의 문자 인코딩 지원으로 인해 .NET과 동일한 수준의 해시 지원을 제공하지 않는다고 동의했습니다. 이것은 내가 의심했던 것이다.