CからPHPへのハッシュ機能を実装しようとしていますが、問題が発生しました。これに助けを借りて本当に感謝します。PHPとCのインクリメンタルハッシュ
これは、複数回のハッシュC-コードです:
SHA_CTX ctx;
SHA1_Init(&ctx);
SHA1_Update(&ctx, (const u_int8_t *) salt, strlen(salt));
SHA1_Update(&ctx, (const u_int8_t *) argv[1], strlen(argv[1]));
SHA1_Final(temp, &ctx);
しかし、その後、それをループで再びハッシュ化された、と私はPHPで実装するためのトリッキーな部分があります:
for (n = 0; n < 2 ; ++n) {
SHA1_Init(&ctx);
SHA1_Update(&ctx, (const u_int8_t *)salt, strlen(salt));
SHA1_Update(&ctx, temp, SHA_DIGEST_LENGTH);
SHA1_Final(temp, &ctx);
}
SHA1_Initはループ内で同じコンテキスト& ctxを使用します。私はPHPで行うことができないことを恐れる何か。
これは私の現在のPHPコードです:
$ctx = hash_init('sha1');
hash_update($ctx, $salt);
hash_update($ctx, 'string');
$pw = hash_final($ctx);
for ($round = 0; $round < 2; ++$round) {
$ctx = hash_init('sha1');
hash_update($ctx, $salt);
hash_update($ctx, $pw);
$pw = hash_final($ctx);
}
出力から、私ははっきりと二度目で、それはハッシュはCと同じではないハッシュことがわかります。
C:
cf584b11970312e4b973bc7b35870d7e019affcd
cb1ea097e844363e4e76d512af4245c10ade1725
PHP:
cf584b11970312e4b973bc7b35870d7e019affcd
3003969f9065d7614d7cf34675b9d9bf7584d7c3
どのように私はPHPで古いコンテキストでハッシュすることができますか?私はこれを行う方法に関するドキュメントを見つけることはできませんし、どこが間違っているのか分かりません。
この問題を解決する方法については、あらゆる種類のコメントに感謝します。
"$ ctx = hash_init( 'sha1');"あなたのループで? – apoq
はい、エラーになり、ハッシュは生成されません:警告:hash_final():4は有効なハッシュコンテキストリソースではありません。 – Ms01
CとPHPの両方に完全なコードを組み込むと、助けが簡単になります。 – whooot