Так что это код, который я использую в качестве примера
Aes128KeyLength = 128/8;
//
// Allocate Key buffer
//
Aes128Key = (PBYTE) HeapAlloc( GetProcessHeap(), 0, Aes128KeyLength);
if( NULL == Aes128Key )
{
Status = STATUS_NO_MEMORY;
ReportError(Status);
goto cleanup;
}
//
// Derive the AES 128 key from the password
// Using PBKDF2
//
//
// Open an algorithm handle
//
Status = BCryptOpenAlgorithmProvider(
&KdfAlgHandle, // Alg Handle pointer
BCRYPT_PBKDF2_ALGORITHM, // Cryptographic Algorithm name (null terminated unicode string)
NULL, // Provider name; if null, the default provider is loaded
0); // Flags
if( !NT_SUCCESS(Status) )
{
ReportError(Status);
goto cleanup;
}
//
// Create a key handle to the password
//
Status = BCryptGenerateSymmetricKey(
KdfAlgHandle, // Algorithm Handle
&Aes128PasswordKeyHandle, // A pointer to a key handle
NULL, // Buffer that recieves the key object;NULL implies memory is allocated and freed by the function
0, // Size of the buffer in bytes
(PBYTE)Aes128Password, // Buffer that contains the key material
sizeof (Aes128Password), // Size of the buffer in bytes
0); // Flags
if( !NT_SUCCESS(Status) )
{
ReportError(Status);
goto cleanup;
}
//
// Derive AES key from the password
//
Status = BCryptKeyDerivation(
Aes128PasswordKeyHandle, // Handle to the password key
&PBKDF2Parameters, // Parameters to the KDF algorithm
Aes128Key, // Address of the buffer which recieves the derived bytes
Aes128KeyLength, // Size of the buffer in bytes
&ResultLength, // Variable that recieves number of bytes copied to above buffer
0); // Flags
if( !NT_SUCCESS(Status) )
{
ReportError(Status);
goto cleanup;
}
Я использую функцию hash_pbkdf2
для того же самого на стороне PHP.в PHP я добавил echo hash_pbkdf2("sha256","PASSWORD", $salt,1000, 16, TRUE);
в чем причина этого?Я пробовал различные стандартные тесты, которые я нашел в Интернете, но результаты все равно не совпадают.Я не могу видеть, где я могу испортить.Для кода на C число итераций равно 1000 вместе с тем же значением на стороне PHP.Все значения, которые я передаю функции, одинаковы на стороне PHP и C.все же вывод на стороне C и PHP производного ключа не совпадает?Что я делаю не так или есть какие-то проблемы с возможностями, о которых мне следует знать?