Warum ist mein SHA1-Hash passender nicht?
Frage
Ich glaube nicht, ich war spezifisch genug, um beim letzten Mal. Los geht's:
Ich habe einen Hex-String:
742713478fb3c36e014d004100440041004 e0041004e00000060f347d15798c9010060 6b899c5a98c9014d007900470072006f007 500700000002f0000001f7691944b9a3306 295fb5f1f57ca52090d35b50060606060606
Die letzten 20 Bytes sollte (theoretisch) enthalten einen SHA1-Hash des ersten Teils (vollständige String - 20 Bytes). Aber es funktioniert nicht für mich passen.
Der Versuch, dies mit PHP zu tun, aber kein Glück. Können Sie ein Spiel bekommen?
Ticket:
742713478fb3c36e014d004100 440041004e0041004e00000060 f347d15798c90100606b899c5a 98c9014d007900470072006f00 7500700000002f0000001f7691944b9a
SHA1-Hash Ticket Original angehängt:
3306295fb5f1f57ca52090d35b50060606060606
My SHA1-Hash-Ticket:
b6ecd613698ac3533b5f853bf22f6eb4afb94239
Hier ist, was im Ticket ist und wie sie gespeichert werden wird. FWIW, ich kann Benutzernamen herausziehen, etc, und die verschiedenen Trennzeichen erkennen. http://www.codeproject.com/KB/aspnet/Forms_Auth_Internals/AuthTicket2. JPG
Editiert: Ich habe entdeckt, dass die Zeichenfolge am Ende durch die Entschlüsselungsfunktion aufgefüllt wird durch vor diesem Punkt geht. I entfernt die letzten 6 Bytes und durch Ticket und hash entsprechend angepasst. immer noch nicht funktioniert, aber ich bin näher.
Lösung
Ihr Ticket wird auf dem Hex-String selbst berechnet. Vielleicht ist die beigefügte Hash auf einer anderen Darstellung der gleichen Daten berechnet?
Andere Tipps
Ich denke, Sie werden immer verwirrt über Bytes vs Zeichen.
Intern PHP speichert jedes Zeichen in einer Zeichenkette als ein Byte. Der SHA1-Hash, die PHP erzeugt, ist eine 40-Zeichen (40 Byte) hexadezimale Darstellung der 20-Byte-Binärdaten, da jeder Binärwert muss durch 2 Hex-Zeichen dargestellt werden.
Ich bin mir nicht sicher, ob dies die eigentliche Quelle der Diskrepanz ist, aber dieses Missverständnis zu sehen, macht mich fragen, ob es in engen Zusammenhang steht.
Versuchen Sie die Zeichenfolge ersten Trimmen, es ist überraschend einfach eine neue Zeile oder Leerzeichen am Ende zu haben, die den Hash vollständig verändert.
Nach diesem Online SHA1-Tool des Hash-Wert des gegebenen Textes (nach dem neuen Entfernen Linien und Flächen) ist
b6ecd613698ac3533b5f853bf22f6eb4afb94239
Idee: Stellen Sie sicher, dass Ihre inputing Zeichen nicht eine Hex-Zahl mit der PHP-Version
.Das Problem war, dass das Original ein verschlüsselter Hash war. Ich hatte hash_hmac () mit einem Validierungsschlüssel zu verwenden, anstatt SHA1 () ohne.