С OpenSSL вы передаете длину явно.Данные, содержащие значения NULL, не имеют значения.
unsigned char *HMAC(const EVP_MD *evp_md, const void *key,
int key_len, const unsigned char *d, int n,
unsigned char *md, unsigned int *md_len);
n - это длина ваших данных, на которую указывает d .Очевидно, что вы сами должны отслеживать длину *d
, так как strlen
не будет работать.Я был бы шокирован, если бы BSafe не работал таким же образом.
Конечно, как сказано в моем комментарии, использование одноразового пэда два раза ужасно небезопасно.Вы почти наверняка не должны повторно реализовывать крипто примитивы;BSafe не предоставляет потоковые шифры?