Sto cercando di implementare le funzionalità hash da C a PHP, ma ho riscontrato un problema con encountred. Apprezzerei davvero avere un po 'di aiuto in questo.hashing incrementale in PHP vs C
Questo è il C-codice di hashing più volte:
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);
Ma poi si arriva hashing di nuovo in un ciclo, e non v'è la parte difficile per me da implementare in 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 utilizza lo stesso contesto & ctx nel ciclo. Qualcosa che temo di non poter fare in php.
Questo è il mio codice php corrente:
$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);
}
Dall'output, posso vedere chiaramente che nel secondo tempo hash l'hash non è la stessa come in C:
C:
cf584b11970312e4b973bc7b35870d7e019affcd
cb1ea097e844363e4e76d512af4245c10ade1725
PHP:
cf584b11970312e4b973bc7b35870d7e019affcd
3003969f9065d7614d7cf34675b9d9bf7584d7c3
Come posso hash con il vecchio contesto in PHP? Non trovo alcuna documentazione su come farlo e non sono sicuro di dove vada storto.
Sarei grato per qualsiasi commento gentile su come risolvere questo problema!
Hai provato a rimuovere "$ ctx = hash_init ('sha1');" nel tuo ciclo? – apoq
Sì, questo risolve un errore e non viene prodotto alcun hash: Attenzione: hash_final(): 4 non è una risorsa di contesto hash valida, ma anche delle funzioni di aggiornamento. – Ms01
Sarà più semplice aiutare se includi il codice completo sia per C che per PHP. – whooot