문제

나는 지난번에 충분히 구체적이라고 생각하지 않습니다. 여기 우리는 간다 :

나는 16 진수를 가지고 있습니다.

742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606

마지막 20 바이트는 (이론적으로) 첫 번째 부분의 SHA1 해시 (완전한 문자열 -20 바이트)를 포함해야합니다. 그러나 그것은 나에게 일치하지 않습니다.

PHP 로이 작업을 시도하지만 운이 없습니다. 경기를 할 수 있습니까?

티켓:

742713478FB3C36E014D004100 440041004E0041004E00000060 F347D15798C90100606B8999C5A 98C9014D007900470072006F00F0000000000002F0000001F76944B9

SHA1 티켓 해시 원본에 추가되었습니다.

3306295FB5F1F57CA52090D35B50060606060606

티켓의 SHA1 해시 :

B6ECD613698AC3533B5F853BF2F6EB4AFB94239

티켓의 내용과 저장 방법은 다음과 같습니다. fwiw, 나는 사용자 이름 등을 꺼내어 다양한 구분기를 발견 할 수 있습니다.http://www.codeproject.com/kb/aspnet/forms_auth_internals/authticket2.jpg

편집 : 나는이 시점 이전에 겪는 암호 해독 함수에 의해 끝에 문자열이 패딩된다는 것을 발견했습니다. 마지막 6 바이트를 제거하고 그에 따라 티켓과 해시로 조정했습니다. 여전히 작동하지 않지만 더 가깝습니다.

도움이 되었습니까?

해결책

티켓은 16 진 문자열 자체에서 계산됩니다. 부여 된 해시가 동일한 데이터의 다른 표현에서 계산되었을 수 있습니까?

다른 팁

바이트 대 캐릭터에 대해 혼란스러워하고 있다고 생각합니다.

내부적으로 PHP는 모든 문자를 문자열로 바이트로 저장합니다. PHP가 생성하는 SHA1 해시는 20 바이트 이진 데이터의 40 문자 (40 바이트) 16 진수 표현입니다. 각 바이너리 값은 2 개의 16 진 문자로 표시되어야하기 때문입니다.

이것이 당신의 불일치의 실제 원인인지 확실하지 않지만,이 오해를 보면 그것이 관련이 있는지 궁금합니다.

먼저 문자열을 트리밍하십시오. 해시를 완전히 바꾸는 끝에 새로운 라인이나 공간을 갖기가 매우 쉽습니다.

이것에 따르면 온라인 SHA1 도구 주어진 텍스트의 해시 (새 선과 공간을 제거한 후)는 다음과 같습니다.

b6ecd613698ac3533b5f853bf22f6eb4afb94239

아이디어 : 입력 문자가 PHP 버전의 16 진수가 아닌지 확인하십시오.

문제는 원본이 키 해시라는 것입니다. SHA1 ()없이 유효성 검사 키가있는 hash_hmac ()를 사용해야했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top