Мне нужна строка в кодировке sha1, а затем в шестнадцатеричной, длиной 40 символов. Это веб-сервис Java, и на стороне клиента должен быть PHP.
Исходный код - это Java (у меня нет исходного кода, только документация), и он хэширует следующую строку:
chNFe = 43120910585504000174650010000000541123456781 & nVersao = 100 & tpAmb = 2 & dhEmi = 323031322d30392d32375431363a32303a33342d30333a3030 & VNF = 1000,00 & vICMS = 180,00 & digVal = 37327151612b623074616f514f3966414a7766646c5875715176383d & cIdToken = 0000011058550420130001
На следующий шестнадцатеричный код: 3FACB55248244D98C658FC8A826413BCEF10A4AE
Приведенный выше пример взят из документации веб-сервиса, и в нем говорится, что строка была закодирована с помощью sha1, а затем результат был закодирован в шестнадцатеричный формат.
Я пробовал sha1, затем dechex и многие другие способы, но не смог получить тот же результат. Кто-нибудь знает, какой тип кодировки PHP должен сделать, чтобы получить этот хеш?
Спасибо.
48A61A7D2DD56F8A2D301B5EC99152A3BA857C17. Когда в их документе говорится, что кодируется с помощью SHA1, а затем кодируется в шестнадцатеричный, это фактически то, что функция PHPsha1()делает по умолчанию. Не существует нескольких способов вычисления SHA1, поэтому либо их документ неверен, либо вы допустили ошибку при копировании строки в хэш. Вы проверили, не добавляют ли они к вводу какой-то соли? Соль - это строка, которую вы либо добавляете, либо добавляете к строке перед хешированием, и что два конца согласовываются для дополнительной безопасности. - person BenMorel   schedule 19.06.2013