На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Кодирование Base64 и C#


Если вы хоть раз делали какой-нибудь долгосрочный проект в веб-индустрии, то наверняка вам попадался на глаза термин «кодирование Base64». Base64 – это такой формат шифрования, который используется браузерами. Например, для реализации проверки подлинности вводимых данных в форму пароля и логина.

Однако, если вы поинтересуетесь мнением какого-либо специалиста о том, можно ли использовать это шифрование для серьезной защиты, то он просто посмеется. Base64 – двусторонний шифр; так что, если у вас есть оригинальная фраза, то можно просто применить его обратно и получить исходный текст.

Ладно, но если Base64 такой хлам, зачем я рассказываю вам об этом?

Ну, на самом деле, у кодировки Base64 есть еще одно очень хорошее применение. Она отлично подходит для кодирования сложных двоичных файлов и данных в очень простое текстовое представление, которое передается исключительно легко с помощью текстовых протоколов, таких как HTTP.

Подожди. Но HTTP обеспечивает передачу двоичных данных, правильно?

Да это так, но давайте представим на минуту, что вы хотите попытаться сохранить несколько запросов в вашем последнем проекте ASP.NET MVC. Что вы могли бы это сделать, надо вставлять изображения непосредственно в веб-страницы, а затем передавать их все в то же время при доставке исходную страницу. Если у вас появились сомнения по поводу достоверности этой схемы, посмотрите на исходный код для текущей страницы поиска Google. Вы увидите что-то вроде этого:


Рис. 1: Поиск Google использует кодировку Base64 для изображений

Обратите особое внимание на раздел в красном прямоугольнике. Это логотип Google, который отображается на странице, когда вы загрузите её. На самом деле, если вы посмотрите в веб-отладчик при загрузке страницы, вы увидите, что каждый раз логотип Google загружается из кэша на высокой скорости. Поскольку изображения в основном загружены на страницу, на дисплее происходит мгновенно, когда ваш браузер загружает вид.

То, что на то вы смотрите, называется кодированными в Base64URL данными. Это новая вещь, которая была введена в HTML5, и вы можете использовать её не только для изображений, но и для CSS-файлов и JavaScript. Где-нибудь в вашем HTML/MVC вьювере можно указать любые URL, вы можете использовать URL данные.

Интересно, что в .NET имеется очень простая в использовании процедура для генерации этих строки Base64. Поскольку строки представляют собой простой текст, вы также можете легко отправить их с помощью любых услуг по передаче текста, например, SMS.

Запустите Visual Studio, и начните новый проект в режиме консоли. Файл "Program.cs" заполните так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace upRead
{
    class Program
    {
        static void Main(string[] args)
        {
            string simpleText = "Хорошо живет на свете Винни Пух!";
            var simpleTextBytes = Encoding.UTF8.GetBytes(simpleText);
            string enText = Convert.ToBase64String(simpleTextBytes);

            Console.WriteLine("Простой текст: {0}", simpleText);
            Console.WriteLine("Кодированный текст: {0}", enText);
            Console.ReadKey();
        }
    }
}
Когда вы выполните это, вы должны увидеть нечто вроде следующего:


Рис. 2: Тест кодирования Base64

Расшифровка строки обратно так же проста:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace upRead
{
    class Program
    {
        static void Main(string[] args)
        {
            string enText = "0KXQvtGA0L7RiNC+INC20LjQstC10YIg0L3QsCDRgdCy0LXRgtC1INCS0LjQvdC90Lgg0J/Rg9GFIQ==";
            var enTextBytes = Convert.FromBase64String(enText);
            string deText = Encoding.UTF8.GetString(enTextBytes);

            Console.WriteLine("Кодированный текст: {0}", enText);
            Console.WriteLine("Раскодированный текст: {0}", deText);
            Console.ReadKey();
        }
    }
}

Рис. 3: Тест декодирования Base64

Если вы посмотрите на эти два примера кода, то вы увидите, что они работают с массивами байтов. Мы преобразовываем строку в байты, затем кодируем её, а декодер принимает строку и создает массив байт, содержащий декодированное содержимое.

Это означает, что кодирование и декодирование файла так же просто, как и строки:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace upRead
{
    class Program
    {
        static void Main(string[] args)
        {
            var fB = File.ReadAllBytes(@"C:\rab\kot.jpg");
            string encodedFile = Convert.ToBase64String(fB);
            Console.WriteLine("Base 64 Encoded File : {0}", encodedFile);

            var dFB = Convert.FromBase64String(encodedFile);
            File.WriteAllBytes(@"C:\rab\newkot.jpg", dFB);
            Console.ReadKey();
        }
    }
}
Как вы можете видеть, однако, здесь получается большое количество данных.


Рис. 4: Осторожно; при кодировании в base64 на выводе получаются большие объемы данных.

Компромиссом здесь является то, что вы получаете мгновенную загрузку изображений в обмен на несколько больший размер страницы. Так что это не самый лучший способ для "тяжелых" изображений. А наибольший эффект будет достигнут, если ваш веб-сервер сжимает информацию перед отправкой. Из-за своих особенностей Base64 сжимает очень эффективно, так что объем данных, которые отправляются, будет очень небольшим.

Эффективно использовать этот метод для небольших изображений, таких как иконки и логотипы, например, для пользовательского интерфейса. Но помните, что не стоит им злоупотреблять - это инструмент для "точечной" работы.




тегистатьи IT, си шарп, Base64, .NET





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Домашнее шампанское
jQuery - это просто!


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.