Почему HMAC SHA-1 возвратил бы другой обзор с тем же входом?

  • Позвольте упростить задачу для gcc:

    template
    void error(Base const &... args) {} // #1
    
    template>...>{}, int> = 0>
    void error(Ts &&... args) {} #2
    
    int main()
    {
        const Base b;
    
        error(b); // call #1
    }
    

    Следуя (сложным) правилам overload_resolution

    , у нас есть оба метода в качестве жизнеспособных функций обе являются шаблонными, поэтому мы используем более специализированный шаблон

    Я (как clang) понимаю, что # 1 более специализирован, чем # 2, но не для gcc

    Демо

    Я бы сказал, gcc bug.

  • Позвольте упростить задачу для clang:

    template
    void error(Base const &... args) {} // #1
    
    template>::value), int> = 0>
    void error(Ts&&... args) {} // #2
    
    int main()
    {
        Derived d;
        error(d); // call #2
    }
    

    ICE всегда ошибка, так что ошибка clang.

    Для разрешения # 2 является точным соответствием, тогда как # 1 требует преобразования производного класса в его базу.

    gcc соглашается с тем, что # 2 называется.

    Демо

5
задан Alex Reynolds 12 December 2008 в 13:01
поделиться

4 ответа

Я нахожу основные проблемы, которые я имел с хешами в сравнениях:

  1. удостоверьтесь, что данные и ключ являются тем же в обоих сравнениях
  2. удостоверьтесь, что данные и ключ находятся в той же кодировке символов в обоих сравнениях
  3. удостоверьтесь, что ключ и текст передаются то же в обоих сценариях, т.е. какой является ключевым и какой является текстом (это поймало меня несколько раз).

Попытка с помощью Обзора:: модуль SHA, чтобы создать хеш для Вас и сравнить результаты с этим.

use Digest::SHA qw(hmac_sha1_hex);
my $hash = hmac_sha1_hex($data, $key);

См. документы по http://perldoc.perl.org/Digest/SHA.pdf

3
ответ дан 14 December 2019 в 09:03
поделиться

Подпрограмма кодирования фактически идентична в обоих сценариях (за исключением неиспользованного аргумента, переданного подпрограмме, которую я удаляю из своей пользовательской версии).

Так как Вы не сравниваете сами обзоры, но Основу 64 закодированных версии обзоров, я рекомендовал бы создать резервную копию одного шага и проверить сами обзоры. Может быть возможно, что стандартные программы Кодировки Base 64 являются неправильными.

Если Вы не можете сравнить сами обзоры, то используйте ту же стандартную программу кодирования в обеих программах и посмотрите то, что Вы получаете.

2
ответ дан 14 December 2019 в 09:03
поделиться

Я боюсь, что не могу помочь многому здесь, но существует определенно что-то не так с тем, что Вы отправили. Ваш сценарий в качестве примера производит другой вывод для меня и вывод, который Вы отправили, действительно не может быть корректным.

Как мог это

secret key hex: abcd...1234

когда-либо будьте результатом этого

_ascii_to_hex("blahblahblah")

Конечно, целая ascii_to_hex вещь абсолютно не важна Вашей проблеме, но она показывает, что необходимо перепроверить результаты.

1
ответ дан 14 December 2019 в 09:03
поделиться

Разделяй и властвуй?

Тестовые векторы в RFC являются лучшим местом для запуска. Они передавали в обоих экземплярах? Которые Вы пробовали? Если некоторая работа и другие не делают наиболее вероятная проблема состоит в том, что одни из этих двух API неправильно упорядочивают вход ключей (Подписанный по сравнению с неподписанными массивами, преобразованиями набора символов.. и т.д.)

Как в стороне его действительно трудное для помощи Вам, когда Ваш пример не имеет смысла. Поскольку другие упомянули, что шестнадцатеричное представление и тому подобное не является abc.. 123. Заставляет меня задаться вопросом, что еще в Вашем примере неточно?

1
ответ дан 14 December 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: