-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
1

У меня ошибка. Кто поможет

03.09.2013, 13:56. Показов 2392. Ответов 26
Метки нет (Все метки)

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
int  __fastcall TZash::LoadWordListFile(const String& sFileName)
{
    int nNumOfWords = WORDLIST_DEFAULT_SIZE;
  TStringList* pWordList = NULL;
 
  if (!sFileName.IsEmpty()) {
    FILE* pFile = fopen(sFileName.c_str(), "ru");
 
    if (pFile == NULL)
      return -1;
 
    pWordList = new TStringList();
 
  //игнорировать дубликаты
  pWordList->Sorted = true;
    pWordList->Duplicates = dupIgnore;
 
    Refresh();
    Screen->Cursor = crHourGlass;
 
#if 0
    const int BUFSIZE = 64;
    char szBuf[BUFSIZE];
 
    while (fgets(szBuf, BUFSIZE, pFile) != NULL &&
           pWordList->Count < WORDLIST_MAX_SIZE)
    {
      int nWordLen = strlen(szBuf);
      if (szBuf[nWordLen-1] == '\n')
        szBuf[--nWordLen] = '\0';
      if (nWordLen > 0 && nWordLen <= m_nMaxWordLen)
        pWordList->Add(szBuf);
    }
#else
    const int BUFSIZE = 16384;
    char szBuf[BUFSIZE];
    char szWord[WORDLIST_MAX_WORDLEN + 1];
    int nCharsRead;
    int nWordLen = 0;
    bool blBreak = false;
 
    while (!blBreak)
    {
      nCharsRead = fread(szBuf, 1, BUFSIZE, pFile);
      if (nCharsRead == 0) {
        blBreak = true;
        szBuf[nCharsRead++] = '\n';
      }
      for (int nI = 0; nI < nCharsRead; nI++) {
        char c = szBuf[nI];
        switch (c) {
        case '\n':
        case '\t':
        case ' ':
          if (nWordLen > 0 && nWordLen <= m_nMaxWordLen) {
            szWord[nWordLen] = '\0';
            pWordList->Add(szWord);
            if (pWordList->Count == WORDLIST_MAX_SIZE) {
              blBreak = true;
              nI = nCharsRead;
            }
          }
          nWordLen = 0;
          break;
        default:
          if (nWordLen < m_nMaxWordLen)
            szWord[nWordLen] = c;
          nWordLen++;
          continue;
        }
      }
    }
#endif
 
    fclose(pFile);
 
    Screen->Cursor = crDefault;
 
    nNumOfWords = pWordList->Count;
    if (nNumOfWords < 2) {
      delete pWordList;
      return 0;
    }
 
    //давайте обрабатывать ресурсы памяти экономически
    pWordList->Capacity = pWordList->Count;
  }
 
  if (m_pWordList != NULL)
    delete m_pWordList;
  m_pWordList = pWordList;
  m_dWordListEntropy = Log2(nNumOfWords);
 
  /*WordListInfoLbl->Caption = TRLFormat("%d words / %.1f bits per word",
    ARRAYOFCONST((nNumOfWords, roundEntropy(m_dWordListEntropy))));   */
 
  return nNumOfWords;
}
Ругаеться на строку 7
FILE* pFile = fopen(sFileName.c_str(), "ru");

Код ошибки
[BCC32 Error] ZachYlKn1.cpp(756): E2342 Type mismatch in parameter '__path' (wanted 'const char *', got 'wchar_t *')
Full parser context
ZachYlKn1.cpp(751): parsing: int _fastcall TZash::LoadWordListFile(const UnicodeString &)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2013, 13:56
Ответы с готовыми решениями:

У меня ошибка. Кто поможет понять ьне могу что делать
Вот код void __fastcall TZash::Button8Click(TObject *Sender) { int nNumOfPassw = 1; if...

Кто поможет есть код
#if !defined(CSpinH) #define CSpinH...

Кто поможет привязать Progressbar к процессу копирования?
Здравствуйте, уважаемые коллеги!Помогите привязать Progressbar к процессу копирования каталогов....

Кто знает почему он у меня не хочет сохранять в формате .bpr? И нельзя компилировать?
Только установила С++

26
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
03.09.2013, 14:50 2
Сам пишешь класс TZash или где-то надыбал? Что за среда разработки, какие настройки проекта?
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
03.09.2013, 14:53  [ТС] 3
Сам пишу класс Студия RadStudioXe2
0
858 / 447 / 112
Регистрация: 06.07.2013
Сообщений: 1,495
03.09.2013, 14:56 4
wanted 'const char *', got 'wchar_t *'
говорит о том что вы вводите строку юникода, а функция хочет char*
0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
03.09.2013, 16:45 5
Интересно, где и как в RadStudioXe2 определяется класс String?
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
03.09.2013, 16:50  [ТС] 6
Тебе скинуть код модуля TZash.h
0
2644 / 2220 / 239
Регистрация: 03.07.2012
Сообщений: 8,064
Записей в блоге: 1
03.09.2013, 17:09 7
Если ты сам пишешь и String и TZash, то кто виноват, что не можешь согласовать типы параметров? Правая рука не знает, что творит левая...
0
50 / 31 / 4
Регистрация: 25.04.2013
Сообщений: 366
03.09.2013, 18:16 8
Код скопировал откуда то... комментарий "//давайте обрабатывать ресурсы памяти экономически "
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
03.09.2013, 21:59  [ТС] 9
Что Вам не нравиться в комментарии?

Добавлено через 1 час 20 минут
Цитата Сообщение от Raali Посмотреть сообщение
wanted 'const char *', got 'wchar_t *'
говорит о том что вы вводите строку юникода, а функция хочет char*
А что поменять не подскажите?
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,905
04.09.2013, 09:23 10
Странно.
C++
1
2
const String& sFileName
FILE* pFile = fopen(sFileName.c_str(), "ru");
Ругается на
Type mismatch in parameter '__path' (wanted 'const char *', got 'wchar_t *')
Хотя синтаксис
C++
1
FILE *fopen(const char *filename, const char *mode);
А у юникодовской версии
C++
1
FILE *_wfopen(const wchar_t *filename, const wchar_t *mode);
Но раз он говорит, что получает wchar_t, то и принимайте wchar_t
C++
1
FILE* pFile = _wfopen(sFileName.c_str(), "ru");
Хотя наверное будет как-нибудь вот так
C++
1
FILE* pFile = _wfopen(WideString(sFileName), L"ru");
Но все это какая-то фигня.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32443 / 20938 / 8104
Регистрация: 22.10.2011
Сообщений: 36,201
Записей в блоге: 7
04.09.2013, 11:22 11
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Странно.
Ничего странного. В XE2 по умолчанию Юникод включен, а не выключен, как в предыдущих версиях, поэтому String.c_str() возвращает wchar_t*... Более того, wchar_t* возвращается независимо от настроек проекта, что в Unicode, что в ANSI... Так что, либо меняем строку на AnsiString, либо пользуемся теми функциями, которые работают с wchar_t*...
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
07.09.2013, 14:56  [ТС] 12
А написать сможете? как поменять.
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
13.09.2013, 13:01  [ТС] 13
Цитата Сообщение от UI Посмотреть сообщение
Ничего странного. В XE2 по умолчанию Юникод включен, а не выключен, как в предыдущих версиях, поэтому String.c_str() возвращает wchar_t*... Более того, wchar_t* возвращается независимо от настроек проекта, что в Unicode, что в ANSI... Так что, либо меняем строку на AnsiString, либо пользуемся теми функциями, которые работают с wchar_t*...

А написать сможете? как поменять.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32443 / 20938 / 8104
Регистрация: 22.10.2011
Сообщений: 36,201
Записей в блоге: 7
13.09.2013, 13:09 14
C++
1
2
  if (!sFileName.IsEmpty()) {
    FILE* pFile = _wfopen(sFileName.w_str(), L"ru");
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
14.09.2013, 08:48  [ТС] 15
Исправил

Добавлено через 16 часов 18 минут
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
void __fastcall TZash::Button8Click(TObject *Sender)
{
 int nNumOfPassw = 1;
 
  if (Sender == Button8){
   nNumOfPassw = passNUmEdit2->Text.ToIntDef(0);
    if (nNumOfPassw < 1 || nNumOfPassw > PASSW_MAX_NUM) {
      MsgBox(TRLFormat("Неверное количество паролей.\nMinimum - 1, а максимальный "
        "is %d.", ARRAYOFCONST((PASSW_MAX_NUM))), MB_ICONERROR);
    passNUmEdit2->SetFocus();
    return;
     }
   }
 
    int nCharsLen = 0, nNumOfWords = 0;
  double dPasswSec = 0;
 
  if (CheckBox1->Checked) {
    nCharsLen = WordsNumBoxEdit4->Text.ToIntDef(0);
    if (nCharsLen < 1 || nCharsLen > PASSW_MAX_CHARS) {
      MsgBox(TRLFormat("Неверное количество символов.\nMinimum - 1, а максимальный "
        "is %d.", ARRAYOFCONST((PASSW_MAX_CHARS))), MB_ICONERROR);
      WordsNumBoxEdit4->SetFocus();
    return;
    }
 
     dPasswSec = nCharsLen * m_dCharSetEntropy;
  }
 
  if (CheckBox2->Checked) {
    nNumOfWords = WordsNumBoxEdit5->Text.ToIntDef(0);
    if (nNumOfWords < 1 || nNumOfWords > PASSW_MAX_WORDS) {
      MsgBox(TRLFormat("Неверное количество слов.\nMinimum - 1, а максимальный "
        "is %d.", ARRAYOFCONST((PASSW_MAX_WORDS))), MB_ICONERROR);
     WordsNumBoxEdit5->SetFocus();
    return;
    }
    dPasswSec += nNumOfWords * m_dWordListEntropy;
 
  }
 
  int nPasswSec = min(Floor(dPasswSec), ENTROPY_MAX);
  const String sPasswListInfoOrig = "%d пароли генерируются.\r\пмаксимальная безопасности "
    "каждый пароль: %d бит.\r\пмаксимальная безопасности "
    "всего списка: %d бит.";
  static String sPassListMemo1Info;
  TStringList* pPassList = NULL;
 
  bool blCallback = false;
 
  try {
    bool blNoDuplicates = m_passOptions[PASSOPTION_NODUPLICATES];
    int nCallbackFreq;
 
    if (nNumOfPassw > 1) {
      if (sPassListMemo1Info.IsEmpty())
        sPassListMemo1Info = TRL(sPassListMemo1Info);
 
     pPassList = new TStringList;
      pPassList->Capacity = nNumOfPassw;
 
    Form4->Close();
 
    if (blNoDuplicates || nNumOfPassw > 5000) {
        blCallback = true;
    CallbackForm4->Init(TRL("Создание пароля из списка ..."), TRL("%d of %d "
          "пароли генерируются"), nNumOfPassw);
        nCallbackFreq = (blNoDuplicates) ? 100 : 1000;
      }
      else
        Refresh();
 
      Screen->Cursor = (blCallback) ? crAppStart : crHourGlass;
 
    }
 
     // добавить энтропии системы перед инициализацией PRNG -...
    m_pEntropyMng->AddSystemEntropy();
 
    int nI, nPasswFlags = 0, nPassphrFlags = 0;
    SecureString sChars, sWords;
    bool blFirstCharNotLC = m_passOptions[PASSOPTION_FIRSTCHARNOTLC];
 
    if (nCharsLen != 0) {
      if (blFirstCharNotLC && m_blCharSetNonLC)
        nPasswFlags |= GENPASSW_FIRSTCHARNOTLC;
      if (m_passOptions[PASSOPTION_EXCLUDEREPCHARS])
        nPasswFlags |= GENPASSW_EXCLUDEREPCHARS;
      for (nI = 0; nI < GENPASSW_NUMOPTCHARSETS; nI++) {
        if (m_passOptions[PASSOPTION_INCLUDEUCL+nI])
          nPasswFlags |= GENPASSW_INCLUDEUCL << nI;
      }
 
      sChars.New(nCharsLen + 1);
    }
 
    if (nNumOfWords != 0) {
      if (CheckBox3->Checked)
        nPassphrFlags |= GENPASSPHR_COMBINEWCH;
      if (m_passOptions[PASSOPTION_SEPWORDS])
        nPassphrFlags |= GENPASSPHR_DONTSEPWORDS;
      if (m_passOptions[PASSOPTION_SEPWORDSCHARS])
        nPassphrFlags |= GENPASSPHR_DONTSEPWCH;
 
      if (nPassphrFlags & GENPASSPHR_COMBINEWCH)
        nPasswFlags &= ~GENPASSW_FIRSTCHARNOTLC;
 
      sWords.New(nCharsLen + nNumOfWords * (WORDLIST_MAX_WORDLEN + 2) + 1);
    }
 
    int nPasswLen, nPasswCnt = 0;
    int nPasswBytes = sPassListMemo1Info.Length() + 9;
    int nConsecDupl = 0, nMaxDupl = INT_MAX;
 
    try {
      for (nI = 0; nPasswCnt < nNumOfPassw; nI++) {
        if (nConsecDupl > nMaxDupl) {
          MsgBox(TRLFormat("Система защиты останавливается здесь для того, чтобы"
                           "избежать бесконечного цикла.\n"-
                           "Наверное, это не возможно, чтобы создать список из"
                           "%d\nunique записи "
                           "с нынешним пароль.\n\но, %d уникальный "
                           "паролей может быть\ngenerated успешно.",
            ARRAYOFCONST((nNumOfPassw, nPasswCnt))), MB_ICONWARNING);
          break;
        }
 
 
            if (blCallback && nI == nCallbackFreq) {
          CallbackForm4->Callback(nPasswCnt);
          nI = 0;
        }
 
        if (nCharsLen != 0)
          nPasswLen = GenPassword(sChars, nCharsLen, m_sCharSet, m_charSetPredefined,
            nPasswFlags, g_pRandPool);
        if (nNumOfWords != 0)
          nPasswLen = GenPassphrase(sWords, nNumOfWords, m_pWordList, sChars,
            nPassphrFlags, g_pRandPool);
 
        char* pszPass = (nNumOfWords != 0) ? sWords : sChars;
 
        if (blFirstCharNotLC && pszPass[0] >= 'a' && pszPass[0] <= 'z')
          pszPass[0] = char(pszPass[0] - 'a' + 'A');
 
        if (nNumOfPassw == 1) {
          ClearTextBuf(PassEdit3);
          PassEdit3->SetTextBuf(pszPass);
          PassInfoLbl->Caption = TRLFormat("Длина: %d символов / "
            "Безопасность: %d бит", ARRAYOFCONST((nPasswLen, nPasswSec)));
        }
 
     nPasswBytes += nPasswLen + 2; // also count line breaks ("\r\n")!
          if (nPasswBytes > m_nMaxPasswBytes) {
            passNUmEdit2->Text = nPasswCnt;
            MsgBox(TRLFormat("Достигнуто максимальное число байтов, Допускается\n"
              "in the password list.\n\nNumber of passwords has been "
              "снижена до %d.", ARRAYOFCONST((nPasswCnt))), MB_ICONWARNING);
            break;
          }
 
          pPassList->Add(pszPassw);
          nConsecDupl = 0;
        }
 
        nPasswCnt++;
      }
    }
    catch (ECallback& e) {
      MsgBox(TRLFormat("%s.\n%d пароли генерируются.", ARRAYOFCONST((e.Message,
        nPasswCnt))), MB_ICONWARNING);
    }
 
    g_pRandPool->Flush();
    m_pEntropyMng->ConsumeEntropyBits(nPasswSec * nPasswCnt);
    UpdateEntropyProgress();
 
    if (nNumOfPassw == 1)
      PassEdit3->SetFocus();
    else {
      if (blCallback) {
        CallbackForm4->ProgressBar1->Position = nPasswCnt;
        CallbackForm4->ProgressLabel8->Caption = TRL("Копирование списка паролей ...");
        CallbackForm4->Refresh();
      }
 
      String sHeader;
      /*try {
        sHeader = Format(sPasswListInfo, ARRAYOFCONST((nPasswCnt,
          nPasswSec, min(nPasswSec * nPasswCnt, ENTROPY_MAX))));
      }
      catch (EConvertError& e) {
        pLangSupp->LastTranslError(e.Message);
        sHeader = Format(sPasswListInfoOrig, ARRAYOFCONST((nPasswCnt,
          nPasswSec, min(nPasswSec * nPasswCnt, ENTROPY_MAX))));
        sPasswListInfo = sPasswListInfoOrig;
      }                                                */
      Form4->PassListMemo1->Text = sHeader + "\r\n\r\n" + pPassListMemo1->Text;
 
      delete pPassListMemo1;
      pPassListMemo1 = NULL;
 
      if (blCallback)
        CallbackForm4->Terminate();
      blCallback = false;
 
      Screen->Cursor = crDefault;
 
      Form4->Execute();
    }
 }
 catch (Exception& e) {
    MsgBox(TRLFormat("Произошла ошибка при генерации пароля:\n%s.",
      ARRAYOFCONST((e.Message))), MB_ICONERROR);
    g_pRandPool->Flush();
    if (pPasswList != NULL)
      delete pPasswList;
    if (blCallback)
      CallbackForm4->Terminate();
    Screen->Cursor = crDefault;
  }

в 148 строке ошибка
[BCC32 Error] Zach.cpp(1079): E2034 Cannot convert 'char *' to 'wchar_t *'
Full parser context
Zach.cpp(933): parsing: void _fastcall TZash::Button8Click(TObject *)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32443 / 20938 / 8104
Регистрация: 22.10.2011
Сообщений: 36,201
Записей в блоге: 7
14.09.2013, 08:54 16
В 81 строке SecureString - это что?
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
14.09.2013, 08:57  [ТС] 17
Цитата Сообщение от UI Посмотреть сообщение
В 81 строке SecureString - это что?
Это
C++
1
2
3
private:    // User declarations
        TEntropyManager* m_pEntropyMng;
        SecureString m_sCharSet;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32443 / 20938 / 8104
Регистрация: 22.10.2011
Сообщений: 36,201
Записей в блоге: 7
14.09.2013, 09:05 18
Это мне ничего не говорит. Что из себя представляет класс SecureString? В принципе, для исправления ошибки в 148 строке достаточно изменить строку №141 вот так:

C++
1
 wchar_t* pszPass = (nNumOfWords != 0) ? sWords : sChars;
, но тогда у тебя наверняка будут проблемы с компиляцией уже этой строки. Так что рассказывай, что такое SecureString, или сам ищи способ корректно преобразовать ее не в char*, а в wchar_t*
0
-3 / 2 / 0
Регистрация: 03.09.2013
Сообщений: 88
14.09.2013, 09:39  [ТС] 19
Цитата Сообщение от UI Посмотреть сообщение
Это мне ничего не говорит. Что из себя представляет класс SecureString? В принципе, для исправления ошибки в 148 строке достаточно изменить строку №141 вот так:

C++
1
 wchar_t* pszPass = (nNumOfWords != 0) ? sWords : sChars;
, но тогда у тебя наверняка будут проблемы с компиляцией уже этой строки. Так что рассказывай, что такое SecureString, или сам ищи способ корректно преобразовать ее не в char*, а в wchar_t*
Вот здесь

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
int EncryptClipboard(const void* pKey,
                     int nKeyLen,
                     TRandomGenerator* pRandGen)
{
  aes_context cryptCtx;
  sha2_context hashCtx;
 
  try {
    SecureString sText;
    int nTextLen;
 
    if ((nTextLen = getClipboardText(sText)) == 0)
      return CRYPTCLIP_ERROR_NOTEXT;
 
    int nBufSize = 4 + nTextLen + nTextLen / 16 + 64 + 3;
    //             ^   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    //    text length | security margins for compression
    nBufSize = 16 + 16*((nBufSize+15)/16) + 16;
    //         ^^   ^^^^^^^^^^^^^^^^^^^^^   ^^
    //         IV   adjust to blocklength  HMAC (128-bit)
 
    // allocate some memory for the output buffer and the work buffer
    SecureMem<word8> buf(nBufSize), workBuf(LZO1X_1_MEM_COMPRESS);
 
    // get a new initialization vector (IV)
    pRandGen->GetData(buf, 16);
 
    // copy the text length to the buffer
    memcpy(buf + 16, &nTextLen, 4);
 
    // compress the text
    lzo_uint lComprLen;
    lzo1x_1_compress((word8*) sText.Data(), nTextLen, buf + 20, &lComprLen, workBuf);
 
//    ShowMessage(lComprLen); // debug
 
    // destroy the text buffer and the work memory
    sText.Empty();
    workBuf.Empty();
 
    // prepare the crypto stuff...
 
    int nToCrypt = 4 + lComprLen;
 
    // store the length modulo 16 in the 16th byte of the IV
    int nLastBlock = nToCrypt & 0x0F;
    buf[15] = word8((buf[15] & 0xF0) | nLastBlock);
 
    if (nLastBlock != 0) {
      pRandGen->GetData(buf + 16 + nToCrypt, 16 - nLastBlock);
      nToCrypt += 16 - nLastBlock;
    }
 
    // create a buffer for the IV
    word8 iv[16];
    memcpy(iv, buf, 16);
 
    // initialize the cipher and the HMAC
    initCrypto(&cryptCtx, &hashCtx, pKey, nKeyLen, iv, true);
 
    // now encrypt the buffer
    aes_crypt_cbc(&cryptCtx, AES_ENCRYPT, nToCrypt, iv, buf + 16, buf + 16);
 
    // compute the HMAC of [IV+encrypted data]
    sha2_hmac_update(&hashCtx, buf, nToCrypt + 16);
 
    // copy the HMAC to the buffer
    word8 hmac[32];
    sha2_hmac_finish(&hashCtx, hmac);
    memcpy(buf + nToCrypt + 16, hmac, 16);
 
    memset(&cryptCtx, 0, sizeof(cryptCtx));
    memset(&hashCtx, 0, sizeof(hashCtx));
 
    // get the required base64 buffer size
    int nOutBufSize = 0;
    base64_encode(NULL, &((size_t)nOutBufSize), NULL, nToCrypt + 32);
 
    // create a new buffer for base64
    SecureString outBuf(nOutBufSize + 1);
    base64_encode((word8*) outBuf.Data(), &((size_t) nOutBufSize), buf, nToCrypt + 32);
 
    // the clipboard contains sensitive data, so clear it
    ClearClipboard();
 
    // copy the output buffer to the clipboard
    outBuf[nOutBufSize] = '\0';
    Clipboard()->SetTextBuf(outBuf);
  }
  catch (...) {
    memset(&cryptCtx, 0, sizeof(cryptCtx));
    memset(&hashCtx, 0, sizeof(hashCtx));
    return CRYPTCLIP_ERROR_OUTOFMEMORY;
  }
 
  return CRYPTCLIP_OK;
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32443 / 20938 / 8104
Регистрация: 22.10.2011
Сообщений: 36,201
Записей в блоге: 7
14.09.2013, 09:42 20
Да нажми ты уже кнопку Ctrl, и щелкни по названию SecureString, тебя перебросит туда, где описан этот тип, вот это описание и покажи, чего ты какие-то ненужные куски кода показываешь? Меня не интересует, как еще используется SecureString, меня интересует, что это вообще такое...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2013, 09:42
Помогаю со студенческими работами здесь

У меня ошибка
__fastcall TZash::TZash(TComponent* Owner) : TForm(Owner), m_pEntropyMng(NULL),...

у меня не получается сделать БД по теме мебельный салон...кто поможет?
Здравствуйте помогите пожалуйста сделать бд по теме мебельный салон. В ней должны храниться...

У меня есть ехе и его строки надо переименовать! кто поможет люди добрые
Здравствуйте у меня есть ехе и его строки надо переименовать!!! кто поможет люди добрые.Имя...

Ошибка в коде. Кто поможет?
Всем привет. Есть вот такой скрипт - &lt;?php ini_set('error_reporting', 0); ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru