2014-03-19 3 views
4

제공된 .NET 구현에서 사용자 시스템으로 사용자 인증을 마이그레이션하고 있습니다.SqlMembershipProvider 암호 해시 재현

우리는 aspNet_Membership 테이블에있는 이전 암호를 지원할 수 있기를 원합니다.

암호와 소금은이 테이블에 있으므로 이론적으로 SqlMembershipProvder가 사용하는 해시를 다시 계산할 수 있습니다.

그러나 사용중인 알고리즘을 설명하는 것을 찾을 수없는 것 같습니다. 회원 공급자를 조사하면 HMACSHA256을 사용하여 해시를 계산한다고 나와 있습니다.

그러나 저장된 암호 해시는 20 바이트 길이로 암호 및 salt의 sha256 해시를 계산하는 것 이상을 수행해야합니다.

회원 공급자가 거짓말 할 수 있습니까? SHA1 또는 RIPEMD를 사용하고 있습니까?

또는 사용중인 암호화 공급자에 액세스 할 수만 있다면 이전 암호와 소금을 전달할 수 있습니다 ... 필자는 반드시 바퀴를 다시 만들 필요가 없습니다.

+0

감사합니다 해시 길이를 알아 차리지을 위해! 나는 하루 종일 해시를 재현하려고 노력해 왔습니다. SHA1 해시는 20 바이트입니다. 귀하의 관찰에 따라 SHA1을 수동 해시로 사용해 보았습니다. 물론, 그것은 내 MembershipProvider가 HMACSHA256 ('Membership.HashAlgorithmType' = "HMACSHA256")을 사용한다고 주장하는 것과 일치합니다! 진행. 이제 유일한 질문은 "WTF?"입니다. – xr280xr

답변

-2

암호 형식이 1이면 해시를 다시 계산할 수 없습니다.이 알고리즘은 비가역 알고리즘입니다.

사용자가 이동하고 새 암호를 설정할 때마다 사용자의 암호 형식을 변경할 수 있습니다.

+1

해시를 다시 계산해도 역순으로 처리되지 않습니다. 해시를 다시 계산할 수 없으면 해시는 쓸모가 없습니다. – xr280xr

1

예, 회원 등급이 거짓말 일 수 있습니다. ASP.NET 4에 추가 된 해시 및 암호화 옵션을 실제로 사용하려면 SqlMembershipProvider에 passwordCompatMode=Framework40 특성이 있어야하는 것 같습니다.이를 사용하지 않으면 멤버쉽 해시 알고리즘을 무시하고 SHA1을 기본값으로 사용하는 레거시 호환성 모드가 사용됩니다. SqlMembershipProvider의 인스턴스를 만들고 디버거의 _LegacyPasswordCompatibilityMode 속성과 개인 s_HashAlgorithm 멤버 (암호를 해시 한 후에 만 ​​설정 됨)를 확인합니다. 그들은 아마도 "Framework20"과 "SHA1"을 각각 보여줄 것입니다. 귀하의 질문에 감사드립니다, 그것은 내가 대답을 찾을 수있었습니다.

여기 내 질문이며, 자세한 내용과 답변 : https://stackoverflow.com/a/34280119/263832