Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/55: Рейтинг темы: голосов - 55, средняя оценка - 4.67
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9

Функция кодирования в base64

22.05.2013, 14:10. Показов 11260. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот нашел на просторах инета функцию кодировани текста в base64:
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
const char Base64Table[64] =
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
int __stdcall encode_b64(const unsigned char *buftoenc, int bufsize,
   unsigned char *encbuf)
  {
    // выделяем память под временный буфер
    unsigned char *buftemp = new unsigned char[bufsize + 3];
    memset(buftemp, '\0', bufsize+3);
    memcpy(buftemp, buftoenc, bufsize);
 
    int i = 0;
    int b64byte[5];
 
    while (i < bufsize)
      {
        b64byte[0] = buftemp[i] >> 2;
        b64byte[1] = ((buftemp[i] & 3) << 4)|(buftemp[i + 1] >> 4);
        b64byte[2] = ((buftemp[i + 1] & 0x0F) << 2)|(buftemp[i + 2] >> 6);
        b64byte[3] = buftemp[i + 2] & 0x3F;
        if(b64byte[0] == 0)
          encbuf[i + (i / 3)] = '=';
        else
          encbuf[i + (i / 3)] = Base64Table[b64byte[0]];
 
        if(b64byte[1] == 0)
          encbuf[i + (i / 3) + 1] = '=';
        else
          encbuf[i + (i / 3) + 1] = Base64Table[b64byte[1]];
 
        if(b64byte[2] == 0)
          encbuf[i + (i / 3) + 2] = '=';
        else
          encbuf[i + (i / 3) + 2] = Base64Table[b64byte[2]];
 
        if(b64byte[3] == 0)
          encbuf[i + (i / 3) + 3] = '=';
        else
          encbuf[i + (i / 3) + 3] = Base64Table[b64byte[3]];
        i += 3;
      }
 
    delete buftemp;
    return strlen(encbuf);
  }
HTML5
1
Вы должны передать в функцию три параметра. Первый – строка, которая будет кодироваться. Второй – длина этой строки. Третий – строка, в которую функция поместит результат.
Пытаюсь использовать вот так:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString ss,ss1; int a;
ss=Edit1->Text;
a=Edit1->Text.Length();
encode_b64(ss,a,ss1);
Edit2->Text=ss1;
}
encode_b64(ss,a,ss1);

HTML5
1
2
3
4
[C++ Error] Unit1.cpp(220): E2034 Cannot convert 'AnsiString' to 'const unsigned char *'
[C++ Error] Unit1.cpp(220): E2342 Type mismatch in parameter 'buftoenc' (wanted 'const unsigned char *', got 'AnsiString')
[C++ Error] Unit1.cpp(220): E2034 Cannot convert 'AnsiString' to 'unsigned char *'
[C++ Error] Unit1.cpp(220): E2342 Type mismatch in parameter 'encbuf' (wanted 'unsigned char *', got 'AnsiString')
Скажите пожалуйста,как ее правильно использовать.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2013, 14:10
Ответы с готовыми решениями:

Картинка и base64
Как кодировать картинку из Image или из MemoryStream в base64? Спасибо

Системы кодирования
Всем доброго времи суток Нужна помошь а информатике) есть пару заданий которые не могу понять как сделать... 1.Запишите дополнительный...

Кодирование текста BASE64
Помогите! При кодировании текста с английского кодирует и расшифровывает, а с русского – какие-то иероглифы (при расшифровывании). В чем...

19
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.05.2013, 14:37
Потому что он хочет получить на входе указатель
C++
1
2
3
4
5
6
7
8
9
10
void __fastcall TForm1::Button3Click(TObject *Sender)
{
unsigned char *ss,*ss1;
int a;
 
ss=Edit1->Text.c_str();
a=Edit1->Text.Length();
encode_b64(ss,a,ss1);
Edit2->Text=*ss1;
}
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.05.2013, 15:06
cppbuilder.ru ?

1. Картинка и base64

2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#define to_uchar (unsigned char)
 
void base64_encode(char *in, int inlen, char *out, int outlen){
 static const char b64str[65] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 while(inlen && outlen){
 *out++ = b64str[to_uchar(in[0]) >> 2];
 if (!--outlen) break;
 *out++ = b64str[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f];
 if(!--outlen) break;
 *out++ = (inlen ? b64str[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '=');
 if(!--outlen) break;
 *out++ = inlen ? b64str[to_uchar (in[2]) & 0x3f] : '=';
 if(!--outlen) break;
 if(inlen) inlen--;
 if(inlen) in += 3;
 }
 if(outlen) *out = '\0';
}
Здесь

in – входящая строка
inlen – длина строки in
out – выходная строка
outlen – длина выходной строки

Пример:

C++
1
2
3
char uname[] = "china_lover";
char login64[100];
base64_encode(uname,strlen(uname),login64,100);
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.05.2013, 15:18  [ТС]
SatanaXIII, на выходе я получил ,по видимому,длину строки,но не ее саму в закодированном виде.
И еще:
при кодировании разных слов в едит2 всегда выводится чисто 57. Почему?

LK именно оттуда
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
22.05.2013, 15:35
Цитата Сообщение от Gdasar Посмотреть сообщение
Почему?
C++
1
2
3
4
5
6
7
8
9
10
unsigned char *ss,*ss1;
 
int a = Edit1->Text.Length();
ss = new char[a];
ss = (char*)(Edit1->Text.c_str());
ss1 = ss;
encode_b64(ss,a,ss1);
Edit2->Text = (char*)ss1;
delete []ss;
delete []ss1;
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.05.2013, 16:18  [ТС]
Странная какая-то функция
Некоторые слова кодирует,а некоторые нет Или вообще результат не тот.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.05.2013, 17:38
Компоненты TIdEncoderMIME, TIdDecoderMIME

C++
1
2
3
4
5
6
7
#include <memory>
//----------------------------------------------------------------------------
String Base64Encode(String Input)
{
    std::auto_ptr<TIdEncoderMIME> IdEncoderMIME1(new TIdEncoderMIME(NULL));
    return IdEncoderMIME1->EncodeString(Input);
}
2
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
22.05.2013, 17:46
Цитата Сообщение от Avazart Посмотреть сообщение
Компоненты TIdEncoderMIME, TIdDecoderMIME
эх, не читает (это не про вас, Avazart) маладйош собственную же тему
Цитата Сообщение от LK Посмотреть сообщение
1. Картинка и base64
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
22.05.2013, 18:36  [ТС]
LK, я читал ваш пост,вот только не понял,как узнать длину выходной строки.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
25.05.2013, 22:53  [ТС]
Ну в общем перестал я возиться с этой функцией
И заюзал "Индюка",а именно компонент IdBase64Encoder1

C++
1
2
3
 Form1->IdBase64Encoder1->Reset();
 Form1->IdBase64Encoder1->AutoCompleteInput = true;
 Edit2->Text = Form1->IdBase64Encoder1->CodeString(Edit1->Text);
Но опять проблема. Текст шифруется,но не так как нужно. Avazart ты у нас спец по Indy,подскажи как правильно сделать
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.05.2013, 22:54
Цитата Сообщение от Gdasar Посмотреть сообщение
Текст шифруется,но не так как нужно.
А как нужно ?

Пример я привел что непонятно ?
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
25.05.2013, 23:01  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
А как нужно ?
Например: шифруем https://www.cyberforum.ru/
Как шифрует прога: 0;aHR0cDovL3d3dy5jeWJlcmZvcnVtLnJ1Lw==
Как зашифровалось на сайте : aHR0cDovL3d3dy5jeWJlcmZvcnVtLnJ1Lw==
Шифруем киберфорум
Как шифрует прога: 0;6ujh5fD07vDz7A==
Как зашифровалось на сайте : 0LrQuNCx0LXRgNGE0L7RgNGD0Lw=

Это косяк в самом алгоритме?
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.05.2013, 00:28
Мой код дает такой результат
https://www.cyberforum.ru/

aHR0cDovL3d3dy5jeWJlcmZvcnVtLnJ1Lw==

Сходится с http://base64.ru/

Что касается кириллицы то ту возможно нужно учитывать кодировку и если это url то нужно еще эскейпить.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
30.05.2013, 00:43  [ТС]
Avazart, я не могу найти компаненты TIdEncoderMIME, TIdDecoderMIME в билдере.
Возможно,что версия инди старая.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.05.2013, 00:44
9 - тая ?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.05.2013, 00:45
Цитата Сообщение от Gdasar Посмотреть сообщение
TIdEncoderMIME, TIdDecoderMIME
в RAD XE есть.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.05.2013, 00:48
Ну так есть же IdBase64Encoder ?
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
30.05.2013, 00:55  [ТС]
Я не знаю почему,но компонентов нет. У меня 6 билд.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
30.05.2013, 00:56
В bcb6 есть IdBase64Encoder
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
30.05.2013, 00:58  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
В bcb6 есть IdBase64Encoder
Да,есть,но TIdEncoderMIME, TIdDecoderMIME нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2013, 00:58
Помогаю со студенческими работами здесь

Нужен исходник кодирования base64
Нужен исходник программы, которая кодирует текст в base64 и декодирует base64 в текст. Помогите, пожалуйста.

Есть ли сервисы кодирования в base64 с разрывом строк?
Здравствуйте! Есть ли такой сервис, который кодирует строки с разрывом в формат base64. Обязательно с разрывом, это очень важно. ...

Функция кодирования и декодирования
Помогите найти ошибку в программе. Выводит &quot;нейзвестные&quot; символы. Б)Функция кодирования и декодирования charadd(c1,c2:string):string...

Функция кодирования символов
Написать программу, которая содержит функцию bool znak(char&amp; z, int k), которая считывает с клавиатуры один знак (без его отображения на...

Base64
добрый день, господа. никак не могу вкурить как пользоваться функцией CryptBinaryToString для кодирования байтов в base64. дайте...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru