Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Опять RC4 - он меня похоронит. 13.09.01 16:15 Число просмотров: 1256
Автор: PS <PS> Статус: Elderman
|
Итак. Использовав MicroSoft CryptoAPI создал RC4 модуль. Криптует, декрептует - все ОК.
Скачал из инета исходники RC4, откомпилил, собрал модуль - криптует, декрептует, зашибись, все ОК.
А теперь одну и туже последовательность даных (key, data) скармливаю MS и Inet модулям. Опс ! А выходная последовательность - разная !
Хорошо, думаю, в MS ключ генерится из hash зделаным MD5. Беру модуль (опять же с инета) MD5, прогоняю через него ключ, получаю хеш, скармлеваю этот хеш и даные Inet модулю RC4... неа, опять не та последовательность, что MS RC4 выдает.
Даже и не знаю в чем дело...
Вот как я генерю ключ в MS, может тут ошибка ?
unsigned long NASCryptoProvider::GenDelivK( CHAR* szPassword, DWORD dwLength)
{
//--------------------------------------------------------------------
// Declare and initialize variables.
HCRYPTKEY hKey;
HCRYPTHASH hHash;
//--------------------------------------------------------------------
// Acquire a CSP.
//--------------------------------------------------------------------
// Create an empty hash object.
if(CryptCreateHash(
hCryptProv,
CALG_MD5,
0,
0,
&hHash))
{
// printf("An empty hash object has been created. \n");
}
else
{
HandleError("Error during CryptCreateHash!");
}
//--------------------------------------------------------------------
// Hash the password string.
if(CryptHashData(
hHash,
(BYTE *)szPassword,
dwLength,
0))
{
// printf("The password has been hashed. \n");
}
else
{
HandleError("Error during CryptHashData!");
}
//--------------------------------------------------------------------
// Create a session key based on the hash of the password.
if(CryptDeriveKey(
hCryptProv,
CALG_RC4,
hHash,
CRYPT_EXPORTABLE,
&hKey))
{
// printf("The key has been derived. \n");
}
else
{
HandleError("Error during CryptDeriveKey!");
}
//--------------------------------------------------------------------
// Use hKey as appropriate to encrypt or decrypt a message.
//--------------------------------------------------------------------
// Clean up.
// Destroy the hash object.
if(hHash)
CryptDestroyHash(hHash);
// Destroy the session key.
// if(hKey)
// CryptDestroyKey(hKey);
// Release the provider handle.
// if(hCryptProv)
// CryptReleaseContext(hCryptProv, 0);
return hKey;
} // End of main
|
- Опять RC4 - он меня похоронит. - PS 13.09.01 16:15 [1256]
|
|
|