Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline alex_lsd  
#1 Оставлено : 11 августа 2010 г. 14:52:00(UTC)
alex_lsd

Статус: Новичок

Группы: Участники
Зарегистрирован: 10.08.2010(UTC)
Сообщений: 4

Добрый день, уважаемые товарищи...

Являюсь начинающим... Вопрос возник следующий:

Создаю программку, которая просто шифрует строку и тут же ее расшифровывает и выводит (своеобразнные "Hello, world" для CryptoAPI)

Код:

...
int _tmain()
{

HCRYPTPROV hProv;
HCRYPTKEY hSesKey;
DWORD dwFlags=0;
if(!CryptAcquireContext(&hProv,NULL,NULL,1,CRYPT_VERIFYCONTEXT))   //Получение хэндела криптопровайдера

if(!CryptGenKey(hProv,CALG_RC4,dwFlags,&hSesKey))                           //Генерация сессионого ключа
         {
         
         }
else 
          {
           cout"<<"hSesKey"<<"endl;
          }
char string[]="qwertyuiofsdakjfhkjasdfhlkjasdhflkjadhiuertyieruhyfdkjsghfkdjp[]";        //Сообщение для шифрования
DWORD count=strlen(string);
if(!CryptEncrypt(hSesKey,0,true,0,(BYTE *)string,&count,strlen(string)))                       //Шифрование и вывод результата
           {
                std::cout"<<"Error CryptEncrypt"<<"GetLastError()"<<"std::endl;
           }
else
           {     
                std::cout"<<"string"<<"std::endl;
            }
count=strlen(string);
if(!CryptDecrypt(hSesKey,0,true,0,(BYTE *)string,&count))                                            //Дешифрование  и вывод результата
            {
                std::cout"<<"Error CryptEncrypt;
            }
else
            {
                std::cout"<<"string"<<"std::endl;;
              }

int a;
std::cin>>a;
return 0;
}
"



В этом случае работает все нормально и в консоли я получаю следующее (ключ, шифро-текст, тест):

"1396112
юб╝&Єр>^‼☼А)d┌╤↑y(rz"м%ШK:▬zЎ♂╡Б▲♫┬<ч)XФc╝ЛgР↑╓→Kх↕i8¶↔х_)Мщ▀▬
qwertyuiofsdakjfhkjasdfhlkjasdhflkjadhiuertyieruhyfdkjsghfkdjp[]"

Непонятки проявляются когда я пытаюсь тот же самый код использовать с провайдером КриптоПро, то есть:
1. Меняю в фунркции CryptAcquireContext тип провайдера с 1 на 75
2. В функции CryptGenKey() параметр ALD_ID меняю с CALG_RC4 на 26142
В результате в раскодированной строке получается не исходная строка, а какая-то лажа местами с элементами исходной строки. Кроме того, шифро-текст получается разный при одном и том же ключе шифрования. Вообщем и в целом бред!
Прошу направить на путь истинный, дабы спасти душу свою от скитанья во тьме кромешной.
Offline Максим Коллегин  
#2 Оставлено : 11 августа 2010 г. 15:11:29(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
нужно задавать/указывать вектор-инициализации (KP_IV)
Знания в базе знаний, поддержка в техподдержке
Offline alex_lsd  
#3 Оставлено : 11 августа 2010 г. 19:42:56(UTC)
alex_lsd

Статус: Новичок

Группы: Участники
Зарегистрирован: 10.08.2010(UTC)
Сообщений: 4

Задаю вектор иницилизации для сгенерированного ключа
if(CryptSetKeyParam(hSesKey,KP_IV,pbRandomData,0))
{
printf("New initialization vector is set.\n");
}
else
{

printf("The new IV was not set.");
}
выдает: New initialization vector is set, но тем не менее не правильно шифрует/дешифрует
Offline Максим Коллегин  
#4 Оставлено : 11 августа 2010 г. 22:50:15(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
перед расшифрованием тоже?
Знания в базе знаний, поддержка в техподдержке
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
Anocean оставлено 18.05.2023(UTC)
Offline alex_lsd  
#5 Оставлено : 12 августа 2010 г. 12:59:02(UTC)
alex_lsd

Статус: Новичок

Группы: Участники
Зарегистрирован: 10.08.2010(UTC)
Сообщений: 4

Добавил тот же самый код вектора-иницилизации при дешифрованиии и действительно сработало... Большое спасибо! maxdm
А не подскажете ссылочку, где можно почитать инфу про этот вектор-иницилизации, ключ, и их взаимодействие с функциями CryptEncrypt/CryptDerypt?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.