Строка в sha1, затем в шестнадцатеричный (длина 40)

Мне нужна строка в кодировке 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 должен сделать, чтобы получить этот хеш?

Спасибо.


person Edson Garrido    schedule 19.06.2013    source источник
comment
SHA1 вашей строки выше 48A61A7D2DD56F8A2D301B5EC99152A3BA857C17. Когда в их документе говорится, что кодируется с помощью SHA1, а затем кодируется в шестнадцатеричный, это фактически то, что функция PHP sha1() делает по умолчанию. Не существует нескольких способов вычисления SHA1, поэтому либо их документ неверен, либо вы допустили ошибку при копировании строки в хэш. Вы проверили, не добавляют ли они к вводу какой-то соли? Соль - это строка, которую вы либо добавляете, либо добавляете к строке перед хешированием, и что два конца согласовываются для дополнительной безопасности.   -  person BenMorel    schedule 19.06.2013
comment
@Benjamin Существует два способа вычислить SHA1: csrc.nist. gov / Publications / fips / fips180-3 / fips180-3_final.pdf раздел 6.1.   -  person calccrypto    schedule 19.06.2013
comment
@calccrypto Можете ли вы подробнее рассказать об этом? У меня нет ни времени, ни знаний, чтобы прочитать этот документ, но мне определенно было бы интересно узнать об этом больше. Для меня возможен только один результат SHA1 для двоичной строки.   -  person BenMorel    schedule 19.06.2013
comment
@Benjamin Это 2 разных алгоритма для получения одинаковых значений хэша. Второй просто использует меньше памяти   -  person calccrypto    schedule 20.06.2013
comment
@calccrypto Спасибо за точность. Итак, давайте переформулируем: SHA1 детерминирован, и для данной строки не существует двух разных возможных хешей.   -  person BenMorel    schedule 20.06.2013
comment
Похоже, вы пытаетесь следовать этому: nfe.fazenda.gov.br/portal/. Я не могу заставить работать ни один из их примеров SHA1. Их документация может быть неправильной. Здесь есть что-нибудь полезное: groups.google.com/forum/? fromgroups #! topic / nfephp / qT9pun7_eDU   -  person Andre D    schedule 20.06.2013


Ответы (1)


Руководство NFE неверно. В примере String в конце строки есть пробел.

где появляется 5176383d & cIdToken = 000001105855042013000 на самом деле 5176383d & cIdToken = 000001105855042013000

Обычные функции cript this с использованием sha1 решают проблему;)

в mysql вы можете сделать: sha1 (yourExampleString) ... в php может быть что-то вроде ...

person Julio    schedule 10.02.2014