32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
|
|
1 | |
Подкиньте функцию base64_decode\encode04.01.2015, 14:24. Показов 5503. Ответов 34
Метки нет (Все метки)
Помогите найти функцию base64_decode\encode, я уже перепробовал все что нашол в гугле и ниодна не шифрует правильно, мб у кого завалялась
0
|
04.01.2015, 14:24 | |
Ответы с готовыми решениями:
34
Разбираемся с функциями и пишем Encode & Decode Функции encode и decode. Строки. Шифрование на основе алфавита Подкиньте идею Подкиньте задачку |
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
04.01.2015, 17:36 | 21 |
Возможно ты немного недопонимаешь. Программа-кодер base64 вообще не работает с кодировками. Она работает с байтами. А вот байты, которые попадают на вход, зависят от используемой кодировки.
Добавлено через 3 минуты Вот та же программа, но на входе строка в кодировке cp1251 Код
/tmp $ echo -n "qazwsx12вася3@mail.ru" | iconv -f utf-8 -t cp1251 | ./b64 -e cWF6d3N4MTLi4PH/M0BtYWlsLnJ1 А вот назад Код
/tmp $ echo -n cWF6d3N4MTLi4PH | ./b64 -d | iconv -f cp1251 -t utf-8 qazwsx12вас /tmp $ echo -n cWF6d3N4MTLi4PH/M0BtYWlsLnJ1 | ./b64 -d | iconv -f cp1251 -t utf-8 qazwsx12вася3@mail.ru Добавлено через 4 минуты Впрочем, и проблема с буквой я тоже не в этой программе
0
|
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
|
|
04.01.2015, 18:35 | 22 |
Вот онлайн-сервис, где можно выбрать кодирову: http://foxtools.ru/Base64
На скрине результат, который можно сравнить с результатом работы кода, который я выложил.
0
|
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
|
|
05.01.2015, 00:27 [ТС] | 23 |
я понял, в общем выходит что мне нужна функция котороя работает с юникодом, мб хто знает где взять такую?
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
05.01.2015, 01:54 | 24 |
Неа. Все, что нужно тебе уже дали. Нужно только привести в соответствие кодировку, которую подаешь на вход алгоритму с кодировкой, которая используется при проверке. Т.е. если файл (исходник твой) у тебя в cp1251, то и проверять в онлайн сервисе тоже нужно используя cp1251. Все алгоритмы, которые тебе тут давали работают корректно, в том числе с использованием юникода. Как уже говорили, алгоритму base64 по барабану что обрабатывать - он работает с байтами.
0
|
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
|
||||||
05.01.2015, 05:59 | 25 | |||||
Вот работа того же кода со строками в Unicode и в UTF-8:
0
|
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
|
||||||
05.01.2015, 15:16 [ТС] | 26 | |||||
lss, чёт вы меня совсем запутали, а зарве unicode и utf-8 это не одно и тоже? и почему оно влазит в чар? зарве юникод не больше одного байта?
откуда вы взяли эти значения? {0xD0, 0x9F, 0xD1, 0x80, 0xD0, 0xBE, 0xD0, 0xB2, 0xD0, 0xB5, 0xD1, 0x80, 0xD0, 0xBA, 0xD0, 0xB0} если как вы говорите base64 работает с байтами, почему при обработки юникода (wchat_t) я серовно не получаю результат как в онлаин сервисе? Добавлено через 6 минут давайте чтобы не парить друг другу мозги сделаем проще, что нужно изменить в функции b64_encode что бы в результате получить cWF6d3N4MTLQstCw0YHRjzNAbWFpbC5ydQ== вот код
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
05.01.2015, 17:09 | 27 |
Ну нужно ничего менять. Возьми код из оригинального поста. Или любой другой код, который мы тут приводили.
Сохрани исходник в UTF-8. Скомпилируй. И получишь свою cWF6d3N4MTLQstCw0YHRjzNAbWFpbC5ydQ== Вот пример. Компилятор на codepad.org как раз считает, что исходник в UTF-8. Добавлено через 1 минуту Unicode - это так в винде называют utf-16. utf-8 использует char, потому что размер символа у нее плавающий, от 1 до 6 байт.
0
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
||||||
05.01.2015, 17:24 | 28 | |||||
Или используй функции winapi для преобразования кодировок. Только правильно используй.
Вот так должно работать в VS. Но в VS не проверял.
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
05.01.2015, 17:44 | 29 |
1
|
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
|
|
05.01.2015, 17:47 | 30 |
Не знаю, может и лучше. Я бы лучше iconv.h подключил
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
05.01.2015, 17:52 | 31 |
Да, и кодировка файла на этот раз должна быть cp1251 (для русской windows) Для преобразования в UTF-16 VS использует текущую системную локаль.
Добавлено через 35 секунд В VS2013, например, с <stringapiset.h> даже не компилируется
0
|
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
|
|
05.01.2015, 19:45 | 32 |
С точки зрения последовательности байтов (а base64 работает с байтами) - нет (было бы одно и тоже, то здесь: http://foxtools.ru/Base64 не было бы разных пунктов).
Где оно влазит? В слове "Проверка" 8 символов, а в массивах по 16 байтов (char). Перевёл слово "Проверка" в UTF-8 и посмотрел, как это выглядит в памяти (какая последовательность байтов). Потому, что wchar_t это не один байт, а base64 работает с байтами.
0
|
32 / 30 / 4
Регистрация: 01.02.2014
Сообщений: 878
|
|||||||||||
06.01.2015, 01:38 [ТС] | 33 | ||||||||||
grizlik78, в вашем примере работает как надо, всем спасибо, ток вот немного запутался, а что тогда такое кодировка по сути? вот допустим
тоесть
0
|
18842 / 9841 / 2408
Регистрация: 30.01.2014
Сообщений: 17,284
|
|
06.01.2015, 02:12 | 34 |
ASCII-часть одинаковая везде. 97 - это латинская `а`. Первые 127 кодов ASCII таблицы совпадают почти во всех кодировках. Разница начинается, когда в игру вступают локальные символы. Замени латинскую 'а' на русскую и увидишь разницу.
Буквы одинаковые, а коды у них разные. Алгоритм работает с целыми числами, байтами. Если байты разные, то и результат разный. Строка в utf-8 и в локальной кодировке - это разные байты, за исключением первых 127 байт ASCII таблицы. Поэтому строка в разных кодировках даст одинаковый результат при преобразовании base64 только в том случае, если она ограничивается символами с кодами из этих 127 байт, в остальных случаях результат будет разный.
1
|
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
|
|
08.01.2015, 10:43 | 35 |
DrOffset, возник вопрос по коду из 19 поста. Зачем, перед сдвигом, сбрасываются биты, в направлении сдвига, вот в этих выражениях:
char_array_4[0] = ( char_array_3[0] & 0xfc) >> 2; // сброс двух справа, и сдвиг на два вправо ... + ((char_array_3[1] & 0xf0) >> 4); // сброс четырёх справа, и сдвиг на четыре вправо ... + ((char_array_3[2] & 0xc0) >> 6); // сброс шести справа, и сдвиг на шесть вправо Разве тут недостаточно просто сдвига?
0
|
08.01.2015, 10:43 | |
08.01.2015, 10:43 | |
Помогаю со студенческими работами здесь
35
Подкиньте идею:) Подкиньте практику по С/С++ Подкиньте рандомно задачки Подкиньте код нарисованных фигур в с++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |