Как прикрепить домен к VPS через IP VPS и NS — сервера регистратора

👁 299 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

На данный момент многие пользователи, когда доходят до того, что границы обычного хостинга исчерпывают свои возможности для нестандартных проектов, переходят на выделенные сервера VPS/VDS. Если кратко, то это голая консольная операционка, чаще всего Ubuntu или Debian, которая работает на виртуальной машине на сервере. Вот для вас и выделяется отдельная такая операционка, на которой ничего нету и вам надо на ней установить все своими руками. В данной статье не будут объяснения как именно добавлять сайт или настроить бд, а покажем как прикрепить сторонний домен к данному голому серверу, если компания, предоставляющая данный сервер, не имеет собстенного NS — сервера. NS — сервер — это сервер, который содержит локальные доменные имена, в данном случае, в пределах зоны выделения доменов или серверов данной фирмой.

Если бы ваша фирма, которая предлагает вам услуги VPS предоставляла еще и NS-сервера, то вам было бы достаточно добавить их в специальной панели у регистратора доменного имени и можно было бы запросто прикрепить данный домен к IP VPS, но бывает так, что данные сервера отсуствуют у фирмы и задачу прикрепления надо решить вам самим.

Предисловие

Существуют несколько способов как прикрепить домен к своему VPS:

  • использовать DNS самой компании, которая предоставляет NS-сервера;
  • использовать сторонние организации, которые предоставляют NS-сервера. Ярым примером можно назвать бесплатную услугу от Яндекса или другие, возможный список которых нашел на Хабре;
  • использовать свои собственный DNS на вашем VDS — придется самим разбираться как это делать и что устанавливать;
  • использовать бесплатный DNS Вашего регистратора, прописав лишь IP своего сервера в настройках делигирования домена;

Самый простой способ — это последний способ. Его легко настроить и он вполне рабочий. Для того чтобы перейти к делу вам необходимо настроить сайт на VDS без доменного имени и убедиться что на сайт можно зайти набрав IP — адрес сервера. Если кратко, то как вариант установить VESTA и настроить все через него. Данная контрольная панель бесплатная и для ее установки набираем в консоли:


curl -O http://vestacp.com/pub/vst-install.sh

Если неизвестная команда curl, устанавливаем curl:

 apt-get curl

Далее устанавливаем скачанный выше VESTA:


sudo bash vst-install.sh

В ходе установки указываем свой рабочий e-mail и соглащаемся со всеми условиями, если таковые будут и на финише мы увидим окно:

vesta-finish-install

т.е. Vesta покажет вам IP-фдрес для доступа к контрольной панели вашего сервера и тот же адрес со всеми данными для входа будет отправлен вам на E-mail, который вы указывали в ходе установки. Далее на контрольной панели Vesta создаем WEB — сайт:

vesta-create-web

Создаем БД тоже и загружем таблицы, если сайт переносится и переходим в раздел DNS. В данном разделе надо добавить доменные имена для сайтов, которые у вас будут на VPS, а их количество зависит от хостов в разделе WEB контрольной панели:

vesta-create-dns

Итак, у нас все есть на VPS и сайт доступен по IP адресу VPS. Осталось прикрепить доменное имя к сайтам.

Необходимо отметить, что сервер может иметь несколько доменных имен, но один IP — адрес. Данный адрес VPS необходимо нам сейчас прописать в настройках делегирования доменного имени сайта регистратора.

Идем на панель управления регитратора доменного имени и нет разницы у кого вы регистрируете данная функция должна быть у всех и все должны предоставить собственные NS — сервера, которые мы не трогаем. Удаляем старый IP, который был там, если вы регистрировали на него хостинг и добавляем новый IP от вашего VPS, как ниже:hoster-add-ip-of-vps

После того, когда все прописано необходимо подождать пока переделегируется домен на новый IP адрес вашего сервера. Это может занять от 20 минут до нескольких часов и все, домен привязан к серверу.

Переменные в C#. Способы объявления массивов

👁 281 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

В C# имеется богатый набор способов объявления этих массивов и иногда путаешься, когда разные языки программирования мелькают перед глазами через промежутки времени, ведь нет же такого, чтобы современный программист работал только с одним языком, а разные языки — это разная философия и методология, хоть и есть одинаковые понятия, подходы и схожесть синтаксиса. Разработчики всегда ищут облегчение процесса и за все время существования C# таких облегчений накопилось столько, что один и тот же вариант можно сделать несколькими способами.

Вступление

Данная статься будет организована попунктно — сначала рассмотрим обобщенно про массивы, а далее перейдем к многомерностям. Данная статья не последняя, могут быть продолжения по схожим тематикам, а C# есть много механизмов, относящихся к структурам(structure), спискам(List), словарям(Dictionary), хэш-таблицы(хэш-таблицы), потокобезопасные коллекции(Concurrent), строго типизированные коллекции(Generic), коллекциям объектной модели(ObjectModel), специализированные коллекции(Specialized). Ну в общем, тема большая и без грамотного составления структуры обучения будет очень сложно все это понять.

Способы объявления и инициализации одномерных массивов в C#

Давайте сразу скажем, что в C# имеются 5 способов объявления и инициализации массивов:

  1. Инициализировать при объявлении без спецификация ранга. При данном подходе индекс во второй части опускается и он берется автоматом при подсчете значений инициализации:
    int[] myArray = new int[] { 1, 3, 5, 7, 9};

     

  2. Инициализация без указания повтора типа переменных после равенства. При данном походе размер массива также, как и в первом случае, рассчитывается автоматом, исходя из количества значений, участвующих в инициализации переменных внутри массива:
    string[] myArray = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

     

  3. Можно объявить переменную массива без инициализации, но при присвоении массива этой переменной нужно использовать оператор new:
    int[] myArray;
    myArray = new int[] { 1, 3, 5, 7, 9 };

     

  4. В C# массивом может быть не только любой базовый тип, но и класс. В понимании C# типом считается и класс, в том числе:
    class MyType{
        public string mField;
    }
    MyType[] myArray = new MyType[10];
    MyType myTypeVar0 = new MyType();
    myTypeVar0.mField = "Text 0";
    MyType myTypeVar1 = new MyType();
    myTypeVar1.mField = "Text 1";
    ...
    myArray[0]=myTypeVar0;
    myArray[1]=myTypeVar1;
    ...
  5. В C# массив может принимать любой тип данных, если при инициализации указать тип object. Данный тип является родоначальником всех типов и поэтому может принимать любой тип:
    object[] myArray = new object[]{1, "text", 1.2, 'A'};

Способы объявления и инициализации многомерных массивов в C#

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

  1. Многомерный массив в C# может иметь много измерений до бесконечности, но больше 2-х на практике редко используются:
    int[] myArray1 = new int[4];//Массив 1-го измерения
    int[,] myArray2 = new int[4, 5];//Массив 2-го измерения
    int[,,] myArray3 = new int[4, 5, 7];//Массив 3-го измерения
    int[,,,] myArray4 = new int[4, 5, 7, 9];//Массив 4-го измерения
    ...

     

  2. Массив можно инициализировать при объявлении, как показано в следующем примере:
    int[,] myArray2 = new int[2, 2]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  3. Можно опустить указание размерности:
    int[,] myArray2 = new int[ , ]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  4. Если нужно создать переменную массива без инициализации, то необходимо использовать оператор new:
    int[,] myArray2;
     myArray2 = new int[ , ]{{1, 5}, {6, 8}};//Массив 2-го измерения

     

  5. Следующий пример присваивает значение конкретному элементу массива:
    int[,] myArray2 = new int[2 , 2];//Массив 2-го измерения
    myArray2[1, 2] = 10;//Инициализируем отдельный элемент в массиве

     

Способы объявления и инициализации массивы массивов в C#

Массив массивов — это массив, элементы которого сами являются массивами. Элементы массива массивов могут иметь различные размеры и измерения. Массивы массивов иногда также называются «невыровненными массивами». В следующих примерах показано, как выполняется объявление, инициализация и доступ к массивам массивов.

  1. Ниже показано объявление одномерного массива, включающего три элемента, каждый из которых является одномерным массивом целых чисел:
    int[][] myArray = new int[3][];

     

  2. Перед использованием jaggedArray его элементы нужно инициализировать. Сделать это можно следующим образом:
    myArray[0] = new int[5];
    myArray[1] = new int[4];
    myArray[2] = new int[2];

     

  3. Для заполнения элементов массива значениями можно также использовать инициализаторы, при этом размер массива знать не требуется:
    myArray[0] = new int[] { 1, 3, 5, 7, 9 };
    myArray[1] = new int[] { 0, 2, 4, 6 };
    myArray[2] = new int[] { 11, 22 };

     

  4. Также массив можно инициализировать путем объявления:
     int[][] myArray = new int[][] 
    {
        new int[] {1,3,5,7,9},
        new int[] {0,2,4,6},
        new int[] {11,22}
    };

     

  5. Также можно использовать сокращенную форму. Обратите внимание, что при инициализации элементов оператор new опускать нельзя, так как инициализации по умолчанию для этих элементов не существует:
      int[][] myArray = 
    {
        new int[] {1,3,5,7,9},
        new int[] {0,2,4,6},
        new int[] {11,22}
    };

     

  6. Разреженный массив является массивом массивов и поэтому его элементы являются ссылочными типами и инициализируются значением null:
    myArray[0][1] = 77;
    myArray[2][1] = 88;

     

  7. Массивы массивов можно смешивать с многомерными массивами. Ниже показано объявление и инициализация одномерного массива массивов, состоящего из трех двумерных элементов различного размера:
    int[][,] myArray = new int[3][,] 
    {
        new int[,] { {1,3}, {5,7} },
        new int[,] { {0,2}, {4,6}, {8,10} },
        new int[,] { {11,22}, {99,88}, {0,9} } 
    };

     

  8. Доступ к отдельным элементам выполняется как показано в примере ниже, где отображено значение элемента [1,0] первого массива (значение 5):
    System.Console.Write("{0}", myArray[0][1, 0]);

     

  9. Метод Length возвращает число массивов, содержащихся в массиве массивов. Например, если объявить предыдущий массив, мы получим следующее:
    System.Console.WriteLine(myArray.Length);

Часть 1. Что такое RSA

👁 96 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

RSA (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел. Криптосистема RSA стала первой системой, пригодной и для шифрования, и для цифровой подписи. Алгоритм используется в большом числе криптографических приложений, включая PGP, S/MIME, TLS/SSL, IPSEC/IKE и других или читайте далее из Wikipedia.

Как появился RSA?

Дата начала данного алгоритма уходит к далекому 1976 году, когда в ноябре этого года появилась опубликованная статья Уитфилда Диффи и Мартина Хеллмана под заголовком «Новые направления в криптографии» (англ. New Directions in Cryptography). В то пору, это был новый подход в криптографии, перевернувший представление о криптографических системах, заложив основы к использованию открытых ключей в криптографии.

Разработанный впоследствии алгоритм Диффи — Хеллмана позволял двум сторонам получить общий секретный ключ, используя незащищенный канал связи. Однако этот алгоритм не решал проблемуаутентификации. Без дополнительных средств пользователи не могли быть уверены, с кем именно они сгенерировали общий секретный ключ.

Изучив эту статью, трое учёных Рональд Ривест, Ади Шамир и Леонард Адлеман из Массачусетского технологического института (MIT) приступили к поискам математической функции, которая бы позволяла реализовать сформулированную Уитфилдом Диффи и Мартином Хеллманом модель криптографической системы с открытым ключом. После работы над более чем 40 возможными вариантами им удалось найти алгоритм, основанный на различии в том, насколько легко находить большие простые числа и насколько сложно раскладывать на множители произведение двух больших простых чисел, получивший впоследствии название RSA. Система была названа по первым буквам фамилий её создателей.

В августе 1977 года в колонке «Математические игры» Мартина Гарднера в журнале Scientific American, с разрешения Рональда Ривеста появилось первое описание криптосистемы RSA. Читателям также было предложено дешифровать английскую фразу, зашифрованную описанным алгоритмом.

Описание и понимание алгоритма RSA

Алгоритм RSA основан на трудности разложения на множители больших чисел, которые имеют 2 и только 2 фактора (простых чисел). Система работает на открытом и закрытом ключах (Public and Private keys). Открытый ключ доступен для всех. С этим ключом пользователь может зашифровать данные, но не может расшифровать их и это может только пользователь, у кого закрытый ключ, который, с помощью этого ключа, умеет расшифровать их . Конечно, теоретически их может расшифровать и обычный пользователь с публичным ключом, но это экстремально сложно — генерировать закрытый ключ из открытого. Данный метод зашифровки и расшифровки данных пользователей носит название алгоритма RSA, который очень популярен в зашифровке данных на данный момент. Безопасность RSA зависит от вычислительной сложности факторизации больших чисел.

Генерация двух больших простых чисел

Для того, чтобы привести простой пример будем использовать небольшие цифры, но отметим, что в реальности это не безопасно. Чтобы найти случайные простые числа, мы начнем с случайного числа и поднимемся по возрастанию до нечетного числа, пока мы не найдем простое число. Пусть имеем:


p = 7
q = 19

Пусть n = p*q:


n = p*q = = 7 * 19 = 133

Пусть m = (p – 1)(q – 1):


m = (p – 1)(q – 1) = (7 – 1)(19 – 1) = 6 * 18 = 108

Возьмем маленькие числа e до значения числа m. Числа e – простые по отношению к m и не превышают его значение, это означает, что большое число, которое может точно разделиться как e, так и на m (их наибольший общий делитель, или НОД) равен 1. Алгоритм Евклида используется для поиска наибольшего общего делителя двух чисел, но детали здесь опускаются. Отсюда имеем:


e = 2 => gcd (e, 108) = 2 (нет)
e = 3 => gcd (e, 108) = 3 (нет)
e = 4 => gcd (e, 108) = 4 (нет)
e = 5 => gcd (e, 108) = 1 (да!)

 Находим такое число d, что d*e % m = 1(т.е., чтобы он разделился без остатка). Это эквивалентно нахождению d, удовлетворяющую d*e = 1 + n*m, где n – любое целое число. Мы можем переписать это как d = (1 + n*m) / e. Теперь мы работаем через значения n до целочисленного решения, т.е. пока не будет найдено целочисленное деление:


n = 0 => d = 1 / 5 (нет)
n = 1 => d = 109 / 5 (нет)
n = 2 => d = 217 / 5 (нет)
n = 3 => d = 325 / 5 = 65 (да!)

Для выполнения этого действия с большими числами необходимо использовать алгоритм Евклида.

Открытый ключ (Public key) будет равен:


n = 133
e = 5

 Закрытый ключ (Private key) будет равен:


n = 133
d = 65

Небольшой пример зашифровки и дешифровки алгоритмом RSA

Зашифровка. Сообщение должно быть числом, меньшим, чем p и q. Тем не менее, на данный момент мы не знаем р или q, поэтому на практике нижняя граница р и q должны быть опубликованы. Это может быть несколько ниже их реального значения и поэтому не является главным вопросом безопасности. Для этого примера, будем использовать сообщение «6».


C = p * e % n = 65 % 133 = 7776 % 133 = 62

Дешифровка. Это работает очень похоже на процесс шифрования, но включает в себя большое распределение, которое разбивается на несколько шагов.


P = C*d % n = 6265 % 133 = 62 * 6264 % 133 = 62 * (622)32 % 133 = 62 * 384432 % 133 = 62 * (3844 % 133)32 % 133 = 62 * 12032 % 133

Теперь повторим последовательность операций, снижения 6265 до 12032, чтобы уменьшить показатель до 1.


...= 62 * 3616 % 133 = 62 * 998 % 133 = 62 * 924 % 133 = 62 * 852 % 133 = 62 * 43 % 133 = 2666 % 133 = 6

И то, что получилось мы ставим в начало открытого текста, вот так алгоритм и работает.