вторник, 13 февраля 2018 г.

Получение контрольной суммы SHA-1 приложения

Ищем где на компьютере находится keytool
Скорее всего он пудет в папке 
C:\Program Files\Java\jdk1.7.0_05\bin

Путь и версия jdk могут быть разными

Открываем командную строку и вводим:
keytool -list -v -keystore D:\MyKeys\mykey.jks -alias MyApp

Где:
D:\MyKeys\mykey.jks  — путь к вашему ключу
mykey.jks — имя ключа
alias — псевдоним ключа. 

Далее система попросит ввести пароль. Вводим пароль который создали в процессе создания ключа.
После успешного ввода пароля получаем SH1:
SHA1: F3:A3:24:75:B2:A8:AD:09:R4:72:32:53:72:B5:98:5D:KF:1B:84:KC

Получите ключ Google Maps API

Для доступа к серверам Google Maps вашему приложению требуется ключ API. Вам нужен ключ API с ограничением для приложений Android. Ключ предоставляется бесплатно. Вы можете использовать его с любым из своих приложений, обращающихся к Google Maps Android API, без каких-либо ограничений по количеству пользователей.
Выберите один из следующих способов получить свой ключ API из Android Studio.
  • Самый быстрый и простой способ: Используйте ссылку в файле google_maps_api.xml, созданном Android Studio.
    1. Скопируйте ссылку из файла google_maps_api.xml и вставьте ее в адресную строку своего браузера. Эта ссылка перенаправит вас в Google API Console и предоставит в Google API Console необходимую информацию через параметры URL, тем самым сократив объем данных, которые требуется вводить вручную.
    2. Выполните инструкции, чтобы создать новый проект в Google API Console, или выберите существующий проект.
    3. Создайте ключ API, ограниченный для Android, для своего проекта.
    4. Скопируйте созданный ключ API, вернитесь в Android Studio и вставьте ключ API в элемент в файле google_maps_api.xml.
  • Несколько менее быстрый способ: Используйте учетные данные в файле google_maps_api.xml, созданном Android Studio.
    1. Скопируйте учетные данные из файла google_maps_api.xml.
    2. Откройте Google API Console в браузере.
    3. Используйте скопированные учетные данные, чтобы добавить приложение в существующий ключ API или создать новый ключ API.
  • Полный процесс получения ключа API: если в вашем случае ни один из приведенных способов не работает, следуйте описанию всего процесса.

Как сгенировать ключ для использования google maps api в Android

Для того, чтобы использовать в своих android-приложениях пакет классов для работы с  google-maps, необходимо получить от google бесплатный ключ – чтобы вставить его в файл-layout для отображения карты (поле android:apiKey для элемента com.google.android.maps.MapView). Для этого используется утилита keytool. Утилита keytool управляет хранилищем ключей (закрытых и публичных), а также их сертификатами. Хранилище ключй по умолчанию – файл специального формата.
Как получить ключ для google-maps MapView в Android:
1. Создаем новую пару ключей в хранилище (если хранилища не существует оно будет создано)
keytool -genkey -alias <имя ключа> -keystore <имя файла-хранилища ключей и сертификатов>
где:
  • genkey – указывает, что мы хотим создать в хранилище ключей новую пару ключей – открытый и закрытый
  • alias – указывает имя для наших ключей
  • keystore – указывает имя файла-хранилища ключей

2. Создаем и подписываем для ключей сертификат безопасности
keytool -selfcert -alias <имя ключа> -keystore <имя файла-хранилища ключей и сертификатов>
где:
  • selfcert – указывает что мы хотим создать сертифкат безопасности для нашей пары ключей
  • alias – указывает имя для наших ключей
  • keystore – указывает имя файла-хранилища ключей

3. Выводим сгенерированные ключи
keytool -list -alias <имя ключа> -keystore <имя файла-хранилища ключей и сертификатов> -storepass <пароль на хранилище> -keypass <пароль для ключа>
где:
  • list – используется для отображения сгенерированных ключей с псевдонимом заданным после флага alias в хранилище указанном после флага keystore
В результате вы должны получать запись вида:
  • Certificate fingerprint (MD5): 94:1E:43:49:87:73:BB:E6:A6:88:D7:20:F1:8E:B5:98
4. Скопировав полученное значение мы вставим его в специальную строку запроса на страничке google получения кодов, на его основе, в ответ, нам сгенерируется ключ, который мы должны вставить в наш код.
Пример для debug mode:
  • keytool -list -alias androiddebugkey -keystore $HOME/.android/debug.keystore -storepass android -keypass android

воскресенье, 14 января 2018 г.

Декодирование VK Audio

define('VK_ID', ID_пользователя_в_виде_числа); function decode($str){ $vals = explode("#", explode("?extra=", $str)[1]); $tstr = vk_o($vals[0]); $ops = vk_o($vals[1]); $ops_arr = explode(chr(9), $ops); $len = sizeof($ops_arr); for($i = $len - 1; $i >= 0; $i--){ $args_arr = explode(chr(11), $ops_arr[$i]); $op_ind = array_shift($args_arr); switch($op_ind){ case "v": $tstr = vk_v($tstr); break; case "r": $tstr = vk_r($tstr, $args_arr[0]); break; case "x": $tstr = vk_x($tstr, $args_arr[0]); break; case "s": $tstr = vk_s($tstr, $args_arr[0]); break; case "i": $tstr = vk_i($tstr, $args_arr[0]); break; } } return $tstr; } $vk_str = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/="; function vk_o($str){ global $vk_str; $len = strlen($str); $result = ""; for($s = 0, $index2 = 0; $s < $len; $s++){ $sym_index = strpos($vk_str, $str[$s]); if($sym_index !== false){ $i = (($index2 % 4) !== 0) ? ( ($i<<6) + $sym_index) : $sym_index; if(($index2%4) != 0){ $index2++; $shift = -2 * $index2 & 6; $result .= chr(0xFF & ($i >> $shift)); } else { $index2++; } } } return $result; } function vk_s($str, $start){ $len = strlen($str); if($len > 0){ $cur = abs($start); $shuffle_pos = array(); for($i = $len - 1; $i >= 0; $i--){ $cur = (($len * ($i + 1)) ^ $cur + $i) % $len; $shuffle_pos[$i] = $cur; } for($i = 1; $i < $len; $i++){ $offset = $shuffle_pos[$len - $i - 1]; $prev = $str[$i]; $str[$i] = $str[$offset]; $str[$offset] = $prev; } } return $str; } function vk_i($str, $i){ return vk_s($str, $i ^ (int) VK_ID); } function vk_v($str){ return strrev($str); } function vk_r($str, $i){ global $vk_str; $vk_str2 = $vk_str . $vk_str; $vk_str2_len = strlen($vk_str2); $len = strlen($str); $result = ""; for($s = 0; $s < $len; $s++){ $index = strpos($vk_str2, $str[$s]); if($index !== false){ $offset = ($index - $i); if($offset < 0){ $offset += $vk_str2_len; } $result .= $vk_str2[$offset]; } else { $result .= $str[$s]; } } return $result; } function vk_x($str, $i){ $xor_val = ord($i[0]); $str_len = strlen($str); $result = ""; for($i = 0; $i < $str_len; $i++){ $result .= chr(ord($str[$i]) ^ $xor_val); } return $result; } echo decode($argv[1]); ?>

понедельник, 18 декабря 2017 г.

Kubernetes. Часть 4

Другие компоненты Kubernetes

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

воскресенье, 17 декабря 2017 г.

Kubernetes. часть 3

Архитектура Kubernetes

Чтобы понять, как Kubernetes может предоставить эти возможности, полезно понять, как он спроектирован и организован на высоком уровне. Kubernetes можно визуализировать как систему, построенную по уровням, причем каждый более высокий уровень абстрагируется от сложности, обнаруженной на более низких уровнях.

среда, 13 декабря 2017 г.

Kubernetes. часть 2

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

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

Как и многие другие сложные продукты, Kubernetes в рамках своей экосистемы вводит ряд специфических понятий и концепций.

Узел (node) — это отдельная физическая или виртуальная машина, на которой развёрнуты и выполняются контейнеры приложений. Каждый узел в кластере содержит сервисы для запуска приложений в контейнерах (например Docker), а также компоненты, предназначенные для централизованного управления узлом.

Под (pod, с англ. — «стручок, кокон», также модуль) — базовая единица для запуска и управления приложениями: один или несколько контейнеров, которым гарантирован запуск на одном узле, обеспечивается разделение ресурсов и межпроцессное взаимодействие и предоставляется уникальный в пределах кластера IP-адрес. Последнее позволяет приложениям, развёрнутым на поде, использовать фиксированные и предопределённые номера портов без риска конфликта. Поды могут напрямую управляться с использованием API Kubernetes или управление ими может быть передано контроллеру.

Том (volume) — общий ресурс хранения для совместного использования из контейнеров, развёрнутых в пределах одного пода.

Все объекты управления (узлы, поды, контейнеры) в Kubernetes помечаются метками (label), селекторы меток (label selector) — это запросы, которые позволяют получить ссылку на объекты, соответствующие какой-то из меток. Метки и селекторы — это главный механизм Kubernetes, который позволяет выбрать, какой из объектов следует использовать для запрашиваемой операции.

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

Kubernetes обеспечивает функции обнаружения сервисов и маршрутизации по запросу. В частности, система умеет переназначать необходимые для обращения к сервису IP-адрес и доменное имя сервиса различным подам, входящим в его состав. При этом обеспечивается балансировка нагрузки в стиле Round robin DNS между подами, чьи метки соответствуют сервису, а также корректная работа в том случае, если один из узлов кластера вышел из строя и размещённые на нём поды автоматически были перемещены на другие узлы. По умолчанию сервис доступен внутри управляемого Kubernetes кластера — например, поды бэкенда группируются для обеспечения балансировки нагрузки и в таком виде предоставляются фронтенду. Также кластер может быть настроен и для предоставления доступа к входящим в его состав подам извне как к единому фронтенду.

Контроллер (controller) — это процесс, который управляет состоянием кластера, пытаясь привести его от фактического состояния к желаемому; он делает это, оперируя набором подов, определяемых с помощью селекторов меток и являющихся частью определения контроллера. Выполнение контроллеров обеспечивается компонентом Kubernetes Controller Manager. Один из типов контроллеров, самый известный — это контроллер репликации (Replication Controller), который обеспечивает масштабирование, запуская указанное количество копий пода в кластере. Он также обеспечивает запуск новых экземпляров пода в том случае, если узел, на котором работает управляемый этим контроллером под, выходит из строя. Другие контроллеры, входящие в основную систему Kubernetes, включают в себя «DaemonSet Controller», который обеспечивает запуск пода на каждой машине (или подмножеством машин), и «Job Controller» для запуска подов, которые выполняются до завершения, например, как часть пакетного задания.

Операторы (operators) — специализированный вид программного обеспечения Kubernetes, предназначенный для включения в кластер сервисов, сохраняющих своё состояние между выполнениями (stateful), таких как СУБД, системы мониторинга или кэширования. Назначение операторов — предоставить возможность управления stateful-приложениями в кластере Kubernetes прозрачным способом и скрыть подробности их настроек от основного процесса управления кластером Kubernetes.