Расчет SHA1 в PHP аналогичен CC_SHA1_Update в C - PullRequest
2 голосов
/ 07 марта 2011

Итак, у меня есть приложение на C, которое передает данные через Интернет на страницу PHP. Реализация C для моего хэша:

    CC_SHA1_CTX ctx;
    CC_SHA1_Init(&ctx);
    CC_SHA1_Update(&ctx, ciph_right,20);
    CC_SHA1_Update(&ctx, _keyRight, 20);
    CC_SHA1_Final(digest, &ctx);

Где ciph_right и _keyRight - это просто 2-байтовые массивы длиной 20. Как я могу добиться такой же реализации для PHP, чтобы получить тот же результат?

У меня нет функции CC_SHA1_Update в PHP, у меня просто есть sha1 (). И, к сожалению, я не уверен на 100%, что на самом деле делает CC_SHA1_Update. Я думал, что это просто объединило два байтовых массива + взяли их хэш вместе, но, похоже, это не так.

У кого-нибудь есть идеи?

Спасибо!

1 Ответ

2 голосов
/ 07 марта 2011

Функция sha1 принимает полную строку и извлекает хеш SHA1 из этой полной строки.

Немного Googling предполагает, что C-вызовы CC_SHA1_Update просто добавляют больше данных для хеширования.

У вас есть два варианта.

  1. Просто объедините все данные вместе и затем вызовите sha1.
  2. Используйте (стандартное) расширение хеша в потоковом режиме:

.

$h = hash_init('sha1');
hash_update($h, 'some data');
hash_update($h, 'some more data');
$final_hash = hash_final($h);

$final_hash должен содержать fa978155004254c23f9cf42918ad372038afcaf5, что соответствует тому же хешу, что и строка 'some datasome more data'.

...