2014-09-08 6 views
0

Laravel 4.2를 사용하고 있습니다.해시/암호화 된 값에 대한 Laravel 고유 유효성 검사

사용자 이름과 전자 메일 주소를 입력하는 등록 양식을 만듭니다. 유효성 검사가 완료되면 전자 메일 필드에 Crypt::encrypt(), 암호 필드에 Hash::make()을 사용하여 암호화 된 값으로 DB에 저장됩니다.

내 문제는 가입하는 각 사용자마다 고유해야하는 이메일 필터에 대한 유효성 검사 규칙을 생성하는 것입니다.

Crypt::encrypt()Hash::make() 동일한 입력 문자열에 대해 매번 임의의 문자열을 생성하므로 입력 값과 데이터베이스의 값이 일치하지 않을 수 있습니다.

전자 메일 주소 (또는 다른 필드)를 데이터베이스에서 항상 암호화해야 할 때 고유 한 것으로 확인하는 가장 좋은 방법은 무엇입니까?

또한 이메일 필드가 암호화된다는 사실을 수용하기 위해 Auth::attempt() 기능을 어떻게 수정합니까?

+0

왜 이메일을 해시 했습니까? – Bowersbros

+0

프로젝트의 맥락에서 중요한 데이터로 간주되기 때문입니다. – Sinmok

+0

http://stackoverflow.com/questions/21802638/laravel-use-hash-as-validator 그러면 도움이 될 수 있습니다. – Bowersbros

답변

0

전자 메일 주소를 Crypt::encrypt()으로 암호화했다고 가정합니다.이 메서드는 매번 다른 IV를 생성하므로 결과가 비 유사합니다.

검색 가능한/비교 가능한 필드가 필요할 때마다 IV (암호화) 또는 소금 (해싱)을 사용할 수 없습니다. 이 문제를 해결하는 한 가지 방법은 전자 메일과 서버 측 키를 입력으로 사용하여 소금을 사용하지 않고 HMAC을 계산하는 것입니다. 이 해시는 암호화 된 이메일과 나란히 저장할 수 있습니다.

공격자가 서버 측 키를 알고 있으면 전자 메일 해시를 무차별 공격으로 유도 할 수 있지만 암호화 키를 알고 암호화 키를 직접 해독 할 수 있습니다. 비밀번호는 복구 할 수 없게 저장해야하기 때문에 비밀번호에는 적용되지 않습니다.

관련 문제