Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
Vstanka
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 39
#1

Crypto++ и "write of address 00000008" - C++

07.05.2015, 11:52. Просмотров 462. Ответов 7
Метки нет (Все метки)

Пытаюсь разобраться с библиотекой Crypto++ и шифрованием AES (CBC). Просмотрела кучу примеров вида:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
AnsiString TfrmMain::AesEncrypt(AnsiString PlainText)
{
    using namespace CryptoPP;
 
    std::string CipherText;
    byte AesKey[ AesKeyLength ]; //  AesKeyLength = 24
    byte AesInitVector[ AesBlockSize ]; // AesBlockSize = 16
    memset( AesKey, 0x00, AesKeyLength );
    memset( AesInitVector, 0x00, AesBlockSize );
 
    try
    {
        CryptoPP::AES::Encryption AesEncryptor(&AesKey[0], AesKeyLength);
        
    CBC_Mode_ExternalCipher::Encryption CbcEncryptor(AesEncryptor, &AesInitVector[0]);
 
        // Encryption
        CryptoPP::StringSource(
            PlainText.c_str(),
            true,
            new StreamTransformationFilter(
                CbcEncryptor,
                new StringSink( CipherText )
            ) // StreamTransformationFilter
        ); // StringSource
 
    }
    catch( const CryptoPP::Exception& e )
    {
        ShowMessage(e.what());
    }
 
    return CipherText.c_str();
}
На строке
C++
1
CryptoPP::AES::Encryption AesEncryptor(&AesKey[0], AesKeyLength);
Вылезает ошибка "Access violation at address 005C17F5 in module 'test.exe'. Write of address 00000008"
В чем может быть ошибка?

Пути к библиотеке прописаны, подключаю так
C++
1
2
3
4
5
#include "cryptopp/cryptlib.h"
#include "cryptopp/aes.h"
#include "cryptopp/modes.h"
#include "cryptopp/filters.h"
#pragma comment (lib, "cryptlib_bds.lib")
Еще может кто-нибудь объяснить про AesKey и AesInitVector? Дело в том, что задача стоит в переделке старого проекта с библиотекой, которая уже не поддерживается и на Buildere старше версии 6.0 не работает.
Раньше на основании строкового ключа длиной 24 символа, н-р, '123456789123456789123456' формировался 192битовый ключ, которым уже шифровался текст. Я так понимаю, в этом примере это AesKey, т.е. можно сделать так:
C++
1
2
AnsiString key = '123456789123456789123456';
strncpy(AesKey, key .c_str(), AesKeyLength);
А что насчет AesInitVector, откуда он берется, как формируется?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2015, 11:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Crypto++ и "write of address 00000008" (C++):

Необработанное исключение в "0x77913ab3" в "x": 0xC0000005: Нарушение прав доступа при чтении "0xdddddddd" - C++
вот код, нужно найти 3 минимальных положительных числа в массиве. При размере массива больше 950 в конце заполнения рандомным способом...

Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz") - C++
Найти в строке последовательность символов ("abcd") и заменить ее другой ("xyz").

Ошибка: invalid conversion from "int" to "SDL_RendererFlip" - C++
Скриншот приложен, Вот страница, откуда я брал этот код Подскажите что делать

О "нестабильности" или "переполнении" цикла foreach - C++
Здравствуйте, коллеги. Недавно коллега-программист сообщил мне страшную вещь: оказывается, что цикл foreach может переполниться при...

CString buff = "aaa" + "bbb" - C++
Хочется одним оператором конкатенировать несколько подстрок CString buff = "aaa" + "bbb" компилятор выдает error C2110: cannot add two...

Qt Creator. Все "за" и "против" - C++
Доброго времени суток, форумчане! Сегодня задался вопросом использования такой IDE, как Qt Creator. Суть темы заключается в том, что я...

7
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
08.05.2015, 09:07 #2
C++
1
AnsiString key = '123456789123456789123456';
Уверены, что верные кавычки? Меня сильные сомнения терзают.
0
Vstanka
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 39
08.05.2015, 09:25  [ТС] #3
Это чисто для примера, на самом деле значение ключа хранится в БД и извлекается перед шифрование\дешифрованием.
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
08.05.2015, 10:10 #4
Тогда давайте весь ваш код в студию.
0
Vstanka
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 39
08.05.2015, 10:41  [ТС] #5
Тут уже и давать нечего: есть строка, которую надо зашифровать, есть строковый ключ в БД, вызываю процедуру AesEncrypt, результат надо записать в файл. Обратная ситуация: считываем инфу из файла, берем ключ из БД, расшифровываем, выводим результат. Только вот при шифровании - ошибка - прога вылетает.
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
08.05.2015, 11:56 #6
Vstanka, скажите пожалуйста, каким образом не видя перед собой кода, я должен вам ответить на вопрос почему
Цитата Сообщение от Vstanka Посмотреть сообщение
при шифровании - ошибка - прога вылетает
? Я конечно хорош, но пока не телепат. Выкладывайте, посмотрим, что к чему.
0
Vstanka
3 / 3 / 1
Регистрация: 19.08.2013
Сообщений: 39
08.05.2015, 12:10  [ТС] #7
Я же написала, что вылетает на строке:
C++
1
CryptoPP::AES::Encryption AesEncryptor(&AesKey[0], AesKeyLength);
0
HighPredator
5544 / 1857 / 346
Регистрация: 10.12.2010
Сообщений: 5,479
Записей в блоге: 2
08.05.2015, 13:07 #8
Vstanka, это понятно. Как вы заполняли массив AesKey? Как определили значение AesKeyLength? Вот поэтому весь код и нужен. Потому, что перед вызовом AesEncryptor вы черти что могли с ним сотворить.
0
08.05.2015, 13:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2015, 13:07
Привет! Вот еще темы с ответами:

Ординарная Сеть Петри для задачи об "обедающих философах" - C++
Помогите с сетью Петри. дуб в этом Задача об обедающих философах. Пять философов отдыхают в пансионате. Каждый из философов может...

Ответы к упражнениям из книги Сэджвика "Фундаментальные алгоритмы на С++" части 1-4 - C++
Привет! Читаю данную книгу, в конце каждой главы имеются упражнения, но нет ответов на них. На решение некоторых задач просто нехватает...

Warning LNK4248: неразрешенная лексема TypeRef для "GLUquadric" - C++
Добрый день господа эксперты! Помогите с таким вопросом компилятор выдает: frmMain.obj : warning LNK4248: неразрешенная лексема...

Ошибка "неопределенная ссылка" при работе с std::thread - C++
При попытке сделать что-либо с std::thread, выдает ошибку компиляции, "неопределенная ссылка " . К примеру: #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru