Библиотека для преобразования между Base64 и hex для С++

Я не могу найти пример кода для преобразования строки Base64 в шестнадцатеричную строку, как в наиболее читаемом формате, например

5c2e00405e56439da66a4bd279dbfba2d605d6949142ade664ce0fc4a7ceee
0a9f0c5f5b8a13bfe6431fe48de5b7935b6604946c811e3b836f77c28f059df801

а также

XC4AQF5WQ52makvSedv7otYF1pSRQq3mZM4PxKfO7gqfDF9bihO/5kMf5I3lt5NbZgSUbIEeO4Nvd8KPBZ34AQ==

Существует ли такая библиотека с открытым исходным кодом? Если да, то где?

Вы можете задать этот вопрос в stackoverflow ... больше шансов получить наилучшие ответы на ваш вопрос. Этот сайт посвящен программированию!
Этот код поможет вам с преобразованием?
Ну, я снова искал «Бесплатные библиотеки» в соответствии с вашим вопросом и нашел эту библиотеку под названием Crypto ++ ... Она поддерживает преобразование Base64 и Hex, как указано в функциях ...: hex, base-32, and base-64 coding/decoding... Я не знаю, как это работает это, но вот ссылка на справочную документацию , доступную на этом веб-сайте.
Сделанный! Ответ опубликован с функциями и ссылками для загрузки и ссылки...

Ответы (4)

Библиотека Crypto++® 5.6.2

Библиотека Crypto++ — это бесплатная библиотека классов C++ для криптографических схем.

Другие функции включают в себя:

  • генераторы псевдослучайных чисел (PRNG): ANSI X9.17, приложение C, RandomPool
  • функции получения ключа на основе пароля: PBKDF1 и PBKDF2 из PKCS #5, PBKDF из PKCS #12, приложение B
  • Схема обмена секретами Шамира и алгоритм распространения информации Рабина (IDA)
  • быстрые целочисленные (bignum) и полиномиальные операции с высокой точностью
  • арифметика конечных полей, включая GF(p) и GF(2^n)
  • генерация и проверка простых чисел
  • полезные некриптографические алгоритмы
    • DEFLATE (RFC 1951) сжатие/распаковка с поддержкой форматов gzip (RFC 1952) и zlib RFC 1950)
    • кодирование/декодирование hex, base-32 и base-64
    • 32-разрядные обертки классов контрольной суммы CRC и Adler32 для следующих функций операционной системы (необязательно):
    • таймеры высокого разрешения в Windows, Unix и Mac OS
    • Сокеты в стиле Беркли и Windows
    • Именованные каналы Windows
    • /dev/случайный, /dev/urandom, /dev/случайный
    • CryptGenRandom от Microsoft в Windows
  • Высокоуровневый интерфейс для большей части вышеперечисленного с использованием метафоры фильтра/конвейера.
  • бенчмарки и проверочное тестирование
  • Ассемблерный код x86, x86-64 (x64), MMX и SSE2 для наиболее часто используемых алгоритмов с обнаружением функций ЦП во время выполнения и выбором кода
    • поддерживает встроенную сборку в стиле GCC и MSVC, а также MASM для x64.
  • некоторые версии доступны в проверенной форме FIPS 140-2.

Скачать:
http://www.cryptopp.com/#download

Руководство:
http://www.cryptopp.com/docs/ref/

Вау, действительно хорошо написанный ответ!
@Cincinnatus Кажется, очень хорошо скопировано - перейдите по ссылке, чтобы увидеть оригинал. // mk117: скопированный контент может вызвать проблемы с авторскими правами, и поэтому в такой форме не очень приветствуется на сайтах SE. Вы всегда должны четко указывать, что является копией, а что вашим собственным контентом. Последнее, кстати, отсутствует в вашем ответе — например, личный опыт работы с этим продуктом;)
@ Иззи, лол, я пошел прямо к руководству.
Для меня кнопка "Скачать" вызвала удивление. Потом я увидел редактирование e-sushi (спасибо ему за обнаружение копи-пасты) и понял причину ;)

Не слишком уверен в том, чтобы сделать это на С++, но на питоне это легко:

#!/usr/bin/env python

import base64
import binascii

def Print64Hex(instring):
    """ Prints a base 64 string as hex."""
    data = base64.standard_b64decode(instring)
    print binascii.hexlify(data)

if __name__ == "__main__":
    import sys
    for d in sys.argv[1:]:
        Print64Hex(d)

Поэтому, если вам просто нужна утилита для этого, get python , также достаточно просто встроить python в вашу программу на C++ и наоборот, поэтому использование python в качестве библиотеки может быть для вас вариантом, см. Встраивание для python 2 или для python3 обратите внимание, что для Python3 вам нужно изменить печать binascii.hexlify(data)наprint(binascii.hexlify(data)) в приведенном выше коде.

Вам не нужна сторонняя библиотека, если вы используете Qt :

#include <QByteArray>

...

QByteArray str1 = "5c2e00405e56439da66a4bd279dbfba2d605d6949142...";
QByteArray hex = QByteArray::fromHex(str1);

QByteArray str2 = "XC4AQF5WQ52makvSedv7otYF1pSRQq3mZM4PxKfO7gqfDF9bihO...";
QByteArray base64 = QByteArray::fromBase64(str2);

QByteArray hexStr = str2.toHex();
Просто чтобы убедиться, что я не ошибаюсь: не является ли Qt — будучи фреймворком для C++ и QML — тоже «третьей стороной»?

В качестве альтернативы уже упомянутому, потенциальные решения…

libb64: Процедуры кодирования/декодирования Base64

libb64 — это библиотека подпрограмм ANSI C для быстрого кодирования/декодирования данных в формат с кодировкой base64 и из него. Включены оболочки C++, а также исходный код для автономных исполняемых файлов кодирования и декодирования.

Лицензия:
общественное достояние.

Скачать:
http://sourceforge.net/projects/libb64/files/latest/download?source=files