2013-08-23 1 views
1

SimpleMembership에서 비밀번호를 사용하여 암호를 실제로 설정하거나 변경하지 않고 일반 텍스트 비밀번호를 해싱하는 것과 동일한 해싱 알고리즘을 사용하는 방법이 있습니까? 난 단지 비교를 위해 해쉬 된 암호 버전을 원한다.SimpleMembershipProvider 해싱 알고리즘에 액세스하는 방법

MVC 4를 사용하여 새 사이트를 구축하고 SimpleMembershipProvider를 사용하여 대부분의 계정 관련 데이터를 처리하도록 선택했습니다. 내가 가진 한 가지 요구 사항은 암호 기록을 유지하는 것입니다. 실제 암호를 검색 할 필요가 없으므로 단방향 해싱이 좋습니다.

별도의 단방향 해싱 알고리즘을 사용하여 별도의 암호 테이블을 유지하는 솔루션을 생각해 냈지만 다소 혼란스러워 보입니다. 새 암호를 사용할 수 있으면 SimpleMembership의 알고리즘을 사용하여 암호를 해시하고 저장된 암호와 비교 한 다음 유효하면 암호 만 변경하면 훨씬 더 깨끗합니다. 이는 이전 사이트에서 암호를 마이그레이션 할 때도 도움이됩니다.

지금 암호 해시 버전을 생성하기 위해 찾을 수있는 유일한 방법은 암호를 변경 한 다음 SQL에서 해시 된 버전을 읽는 것입니다.

답변

3

SimpleMembershipProvider.SetPassword (private 메서드)는 System.Web.Helpers.Crypto.HashPassword을 사용하므로 암호를 해시하는 데 사용할 수 있습니다. 그것은 또한 반환 값에 포함되어있는 소금을 처리합니다.

당신은 또한 무엇 HashPassword 방법 uses.security.cryptography.rfc2898derivebytes.aspx 인 System.Security.Cryptography.Rfc2898DeriveBytes을 사용할 수 있도록 차례로 방법은 그냥 RFC를 2898 해시를 돌려

,하지만 당신은 염장에 대해 걱정할 필요.

HashPassword 메서드를 사용하면 보안 요구 사항에 따라 완벽하게 작동합니다. 나는 새로운 암호가 마지막 5 개의 암호와 일치하지 않는 것과 같은 요구 사항을 시행하도록 요청 받았을 때 이것을 사용합니다 (이것이 좋은 보안 요구 사항인지 여부에 관계없이 작동합니다). 입력 한 암호가 이전 암호와 일치하는지 확인하려면 Crypto.VerifyHashedPassword 메서드가 필요합니다. 이렇게하면 소금도 처리됩니다.