понедельник, 30 июня 2014 г.

Как разблокировать Supra M726G 7" 3G?

(с) http://unlockclub.ru/news/kak-razblokirovat-supra-m726g-3g/



Технические характеристики Supra M726G


  • Операционная система: Android 4.2
  • Процессор: MediaTek MT8312 1.7 GHz (2 ядра)
  • Оперативная память: 512 Mb DDR3
  • Объем встроенной памяти: 4 Gb
  • GPS
  • FM-радио
  • Автоматическая ориентация экрана
  • Микро USB 2.0 для подключения внешних устройств, 3.5 mm выход на наушники
  • Видео форматы: AVI (H.264, DIVX, XVID), rm, rmvb, MKV (H.264, DIVX, XVID), WMV, MOV, MP4 (H.264, MPEG, DIVX, XVID), MPEG, MPG, FLV (H.263, H.264)
  • Аудио форматы: MP3, WMA, MP2, OGG, AAC, M4A, MA4, FLAC, APE, 3GP, WAV.
  • Возможность установки приложений для платформы Android
  • Аккумулятор емкостью 2800 мАч, время непрерывной работы 5 ч.
  • Комплектация: инструкция, зарядное устройство 5V - 2A, USB-кабель, USB-OTG кабель
  • Размеры прибора: 190 * 111 * 9.5 мм

По-умолчанию планшет заблокирован на использование SIM-карт оператора МТС, однако производитель предусмотрел штатную возможность разблокировки этого устройства, с помощью кода разблокировки. Код разблокировки - уникальная последовательность из 8 цифр, зависящая от IMEI, т.о. каждый планшет имеет два кода разблокировки - один для первого слота SIM карт, второй - для второго.

1. Чтобы получить код разблокировки от вас потребуется сообщить нам оба IMEI вашего устройства. Их можно посмотреть на наклейке, а также узнать, набрав в режиме телефона комбинацию: *#06#
2. Оплатите товар (если вы осуществляете оплату через внешнюю платежную систему и по завершении оплаты у вас есть кнопка "вернуться к продавцу" - не забудьте нажать ее), после совершения оплаты внимательно введите в появившуюся форму IMEI1 и IMEI2. 
3. После отправки введенных вами данных - коды разблокировки для каждого слота отобразятся в графе оплаченный товар (если после оплаты товара вы не увидели или случайно пропустили форму для указания IMEI - перейдите по ссылке в письме от oplata.info, которое вы получите сразу же после оплаты). 
4. Вставьте в планшет SIM карту другого оператора, включите его и введите полученный код разблокировки для соответствующего слота.
5. Не забудьте оставить отзыв о приобретенном товаре! 

Приобрести код разблокировки для Supra M726G 7" 3G можно тут - Разблокировка планшета Supra M726G 7" 3G. Код.



пятница, 27 июня 2014 г.

Как перенести установленную систему на аппаратный raid?

Собственно текущие задачи напомнили мне про одну заметку на форуме, которой уже несколько лет -  Как перенести установленную систему на аппаратный raid? . Собственно все очень просто, есть мать с Intel RST - "Intel(R) Desktop/Workstation/Server Express Chipset SATA RAID Controller", который PCI\VEN_8086&DEV_2822&CC_0104. Задача - необходимо перенести на RAID 10+1 установленную Win2k3 с ПК с абсолютно другим железом. Казалось бы самый простой путь - использовать LiveCD + DriverInjection, но файл txtsetup.oem в дистрибутиве драйверов контроллера на оф. сайте отсутствует, что подтверждает и сообщение
Not able to find the file TxtSetup.oem within AHCI Intel® Rapid Storage Technology Driver for Intel Desktop Boards, где человеку в двух словах объясняют что "раз его нет, то он вам и не потребуется" ;) Собственно сами драйвера *.inf можно взять с официального сайта Intel - Intel® Rapid Storage Technology (Intel® RST) RAID Driver, но txtsetup.oem несмотря на огромный readme.txt, в котором описано что он там есть в f6flpy-x86.zip отсутствует. На данный момент пробую перенести с использованием Acronis Universal Restore + принудительная установка драйверов из f6flpy-x86.zip. Посмотрим что получится ;) Впрочем, если не получится - всегда есть альтернативные способы ... создание собственного txtsetup.oem на основе имеющихся от аналогичных платформ и т.п. Обязательно расскажу о результатах.

Updated: Acronis - это fail. Сейчас опробуем другую идею ... развернуть образ на IDE HDD, установить в систему драйвера RAID контроллера, создать RAID и перенести полностью системный раздел на него.

четверг, 26 июня 2014 г.

Разблокировка Oysters T7V 3G

Разблокировка Oysters T7V 3G

Oysters T7V 3G. Разблокировка.Торговая марка Oysters - один из известных производителей потребительской электроники представила в МТС новую модель своего планшета Oysters T7V 3G. Честно говоря, этот бренд не так знаком потребителям, как например, те же Digma или Irbis. Однако, именно компания Oysters вывела в 2006 году на российский рынок торговую марку JJ-connect, занявшую первое место среди компаний, выпускающих автомобильные GPS-навигаторы. Среди продукции компании Oysters, помимо планшетных компьютеров и автонавигаторов можно также выделить радар-детекторы, видеорегистраторы, музыкальные плееры и прочую потребительскую электронику. Впрочем, наша статья не об этом. Планшетный компьютер Oysters T7V 3G начал продаваться в салонах связи МТС практически одновременно с продукцией Irbis, в частности планшетами Irbis TX69, о которых мы писали не так давно. Давайте посмотрим, в чем же разница, и рассмотрим технические характеристики Oysters T7V.

Технические характеристики Oysters T7V 3G

  • Дисплей - TN (TFT) емкостной. сенсорный, 5 точек одновременного нажатия. Диагональ 7" дюймов (17, 78 см.), разрешение: 1024 x 600 пикселей.
  • Система - операционная система Android 4.2, Процессор: MTK 8312, 1.2 GHz, ARM Cortex A7, Память 1 Gb RAM DDR3L. Внутрення память - 4 Gb встроенной памяти, из которой пользователю доступно примерно 1.62 Gb. Таким образом, если вы приобретаете этот планшет для использования вместе с навигационной системой - приобретение microSD для хранения карт - обязательно. В планшет, как вы уже поняли, встроен модуль GPS.
  • Батарея - Li-Pol 2800 мА8ч
  • Камера - задняя 2 Mpix, передняя 0.3 Mpix.
  • Подключение - поддерживаемые протоколы: GPRS, EDGE, HSUPA, WCDMA. Наушники: 3.5 мм mini-jack. Bluetooth 4.0. Слот для карт microSD (до 32 Gb). WLAN: Wi-Fi 802.11 b/g/n. 3G: WCDMA/HSUPA (900/2100 Mhz), GSM/EDGE (850,900, 1800,1900 MHz)
  • Комплектация - планшетный компьютер T7V 3G, руководства пользователя на русском языке (кстати подобного руководства нами не было замечено в комплекте поставки других планшетов, которые можно найти на российском рынке), зарядное устройство для сети питания 220В.
Более подробно с техническими характеристиками этого планшета вы можете ознакомиться на официальном сайте МТС - Планшетный компьютер Oysters T7V 3G 7" Black для работы в сети МТС. Что же касается сравнения с уже упомянутым здесь Irbis TX69, то в известном тесте AnTuTu Benchmark Oysters T7V показал у нас 12187 очков. Что означает. что эти два планшета практически идентичны в плане производительности. Забыли упомянуть, что при покупке Oysters T7V 3G в салонах связи МТС (по-крайней мере на момент написания этой статьи) - вы автоматически становитесь участником акции "2 в 1 Планшет и мобильный интернет за 2690 рублей" и получаете месяц мобильного интернет от МТС в подарок.

По-умолчанию, планшет предназначен для использования только с SIM картами МТС. Однако, производитель предусмотрел штатную возможность разблокировки Oysters T7V с помощью кода разблокировки. После ввода которого, устройство начинает понимать SIM карты всех операторов. На следующей картинке демонстрируется работоспособность устройства в сети Мегафон:

Oysters T7V. Работа в сетях других операторов.

Приобрести код разблокировки для Oysters T7V 3G, а также инструкцию по его вводу в планшет вы можете на нашей торговой площадке.

Ссылки по теме "Разблокировка Oysters T7V 3G"

воскресенье, 22 июня 2014 г.

Разблокировка Alcatel OT-5036D от оператора

В последнее время рынок бюджетных брендированных смартфонов постоянно пополняется новинками, не исключением стала и модель Alcatel OneTouch Pop C5 (OT-5036D), представленная на днях компанией МТС. Часть аппаратов поступивших в продажу, по-умолчанию предназначена для работы только с SIM-картами этого оператора - Alcatel POP c5 за 3290 рублей. Заблокированные на МТС аппараты имеют ID провайдера 5036D-2AMSRU1 (данная информация указана на наклейке на коробке от устройства, а также на наклейке под батареей). Известный ресурс по разблокировке телефонов, 3G/4G модемов - UnlockClub.Ru о котором мы писали ранее предлагает способ по разблокировке данного смартфона от оператора. Подробнее с ним можно ознакомиться в этой статье - Как разблокировать Alcatel OneTouch Pop C5 (OT-5036D)?


Как добавить номер в черный список на смартфоне с Android?

В этой заметке я расскажу вам как добавить номер в черный список на телефоне / планшете с ОС Android. Думаю ни для кого не секрет, что в Google Play существует масса организаторов звонков и других приложений с подобным функционалом (за примерами далеко ходить не надо, достаточно набрать в Google Play поиске "черный список"), часть из них платная, часть free. Да что говорить, в последнее время даже большинство антивирусов под Android имеют в своем функционале подобную возможность (хотя вообщем-то фильтрация нежелательных звонков по-моему мнению не относится напрямую к борьбе с вирусами). Но речь пойдет вовсе не о них, а о том как штатными средствами ОС Android внести контакт в черный список.

Сподвигла меня к написанию данной заметки довольно банальная ситуация. Знакомому на телефон стали названивать коллекторы ("Национальная Служба Взысканий"), с просьбой указать им местоположение некоей особы женского пола, которая что-то там кому-то должна. В первый раз он объяснил им что знать такую не знает и не имеет представления откуда они взяли его номер, вежливо попросил их не звонить больше по этому номеру. После чего последовал еще один звонок, а потом еще, и еще, с требованиями объяснить почему он скрывает где находится эта особа. Вообщем они его в конец достали т.к. объяснять им что-то и тратить свое драгоценное время на пустые разговоры желания никакого не было. Поэтому решено было бороться техническими средствами, а именно, все номера с которых были назойливые звонки - поместить в blacklist (черный список).

Собственно ниже два скриншота, один с ОC Android 4.0, другой с ОС Android 4.2. Все настройки делаются непосредственно в контакте (т.е. открываем контакт, который мы хотим занести в черный список в "Контакты") и нажимаем кнопку меню, после чего ставим галочку так, как на картинке:


Слева - Android 4.0, т.е. в меню контакта ставим галочку "Только голос. почта", а справа Android 4.2 - в меню контакта ставим галочку "Запрет входящих". После чего при звонке с одного из определенных для этого контакта номеров вы не услышите сигнал вызова, а на другом конце провода сразу будут короткие гудки. 


суббота, 21 июня 2014 г.

Код сброса памперса для струйных принтеров Epson

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

Причем предупреждение о скором окончании срока службы впитывающей подкладки (памперса), выскакивает также в виде системного сообщения на мониторе компьютера.


После появления предупреждающего сообщения у вас есть возможность отпечатать еще 15-20 изображений (фотографий) А4 формата, после этого принтер откажется печатать, до момента сброса счетчика отработанных чернил.

Во всех струйных принтерах для сбора отработанных чернил (Waste Ink) используется специальная емкость, которую достаточно часто называют еще «памперсом». Этот «памперс» представляет из себя емкость, в которой находится абсорбирующий материал, хорошо впитывающий отработанные чернила.

Откуда появляются отработанные чернила в струйном принтере? При каждом включении происходит автоматическая прочистка печатающей головки — прокачка небольшого количества чернил из картриджей в печатающую головку, которая в этот момент находится в крайнем правом (левом) положении принтера, и происходит «сброс» чернил в «памперс». Также при запуске штатных прочисток через драйвер принтера, происходит прокачка чернил из картриджей через печатающую головку в абсорбер.

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

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

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

При переполнении «памперса» струйного принтера сервисный специалист должен предпринять следующие действия:
  • провести замену абсорберов – «памперсов»
  • сбросить (обнулить) счетчик отработанных чернил (Waste Ink Counter)."
Сбросить счетчик отработанных чернил "памперса" можно с помощью специальной сервисной программы PrintHelp от команды разработчиков SuperPrint (Resetters). PrintHelp - универсальная сервисная программа для принтеров Epson, Canon.



Программа может выполнять следующие функции для принтеров Epson(не для всех моделей):

- проверка текущего значения счетчика отработанных чернил
- сброс счетчика отработанных чернил (для некоторых моделей требуется КОД СБРОСА )
- прочистка печатающей головки
- усиленная прочистка печатающей головки при первоначальной заправке
- чтение и запись серийного номера принтера
- чтение и запись USB ID
- чтение и запись HEAD ID
- создание дампа EEPROM backup
- тест протяжки бумаги - paper feed test
- проверка и тест дюз
- распечатка цветных заливок
- initialize (disable) PF deterioration offset
- получение статуса о состоянии принтера
- чтение уровня чернил
- сброс Уровня Чернил и сброс Памперса в принтерах L100, L200, L800 бесплатно




Список поддерживаемых моделей принтеров Epson:

Зеленым цветом выделены модели для которых сброс памперса осуществляется БЕЗ Кода Сброса. Сброс памперса БЕЗ Кодов Сброса возможен только для стран: Украина, Россия, Казахстан, Беларусь, Молдавия, Грузия

Artisan: Artisan 50, Artisan 1430, Artisan 700, Artisan 710, Artisan 725, Artisan 730, Artisan 800, Artisan 810, Artisan 835, Artisan 837

B: B40W, B42WD, B1100, B1110
BX: BX300F, BX305, BX310FN, BX320FW, BX525WD, BX600FW, BX610FW, BX620FWD, BX625FWD, BX925, BX935

C: C58, C59, C62, C63, C64, C65, C67, C68, C76, C77, C78, C79, C82, C83, C84, C85, C86, C87, C88, C90, C91, C92, C93, C94, C95, C97, C98, C99, C110, C120
CX: CX2800, CX2900, CX3100, CX3200, CX3300, CX3400, CX3500, CX3600, CX3650, CX3700, CX3800, CX3900, CX4000, CX4080, CX4100, CX4500, CX4600, CX4700, CX4800, CX4900, CX5000, CX5700F, CX5900, CX6300, CX6400, CX6500, CX6600, CX7300, CX7700, CX7800, CX8300, CX8400, CX9300F, CX9400Fax, CX9500F

D: D68, D78, D88, D92, D120

DX: DX3800, DX4000, DX4200, DX4800, DX5000, DX5050, DX6000, DX7400, DX7450, DX8400, DX9400F

EP: E-600, EP-302, E-600, EP-702A, EP-703A, EP-705A, EP-706A, EP-775A, EP-801A, EP-802A, EP-804A, EP-804F, EP-901F, EP-902A, EP-903
K: K100, K101, K200, K201, K300, K301

L: L100, L110, L120, L200, L210, L300, L350, L351, L355, L550, L555, L800, L1300, L1800

M: M100, M105, M200, M205

ME: ME2, ME-10, ME-20, ME-30, ME-32, ME-70, ME-80, ME-82WD, ME-100, ME-101, ME-200, ME-300, ME-301, ME-303, ME-320, ME-330, ME-340, ME-360, ME-401, ME-403, ME-510, ME-520, ME-530, ME-535, ME-560, ME-570, ME-600F, ME-620F, ME-650, ME-900WD, ME-940FW, ME-960FWD, ME-1100

NX: NX110, NX125, NX127, NX130, NX200, NX210, NX215, NX220, NX230, NX300, NX305, NX330, NX400, NX410, NX415, NX420W, NX430, NX510, NX515, NX530, NX620, NX625

P: P50, P60
PX: PX610FW, PX650, PX659, PX660, PX700W, PX710W, PX720WD, PX730FWD, PX800FW, PX810FW, PX820WD, PX830FWD, PX-203A, PX-V600, PX-V630
Photo: Photo 820, 830U, 890, 900, 950, 960, 1280, 1290, 1390, 1400, 1410, Photo 1430, Photo 1500, 2100, 2200
PictureMate: PM100, PM210, PM215, PM225 PM235, PM240, PM250, PM260, PM270, PM280, PM290, PM310. сброс памперса НЕдоступен. Чтение доступно.
PM: PM-3500C, PM-4000px, PM-G800, PM-G4500, PM-G5000, PM-A820, PM-A890

R: R200, R210, R220, R230, R240, R245, R250, R260, R265, R270, R280, R285, R290, R295, R300, R310, R320, R330, R340, R350, R360, R380, R390, R800, R1800, R1900, R2000, R2400, R2880, R3000
RX: RX420, RX425, RX430, RX500, RX510, RX520, RX530, RX560, RX580, RX585, RX590, RX595, RX600, RX610, RX615, RX620, RX630, RX640, RX650, RX680, RX685, RX690, RX700

S: S20, S21, S22
SX: SX100, SX105, SX110, SX115, SX117, SX125, SX130, SX200, SX205, SX210, SX215, SX218, SX230, SX235, SX400, SX405, SX410, SX415, SX420W, SX425W, SX430, SX435, SX510, SX515, SX525WD, SX600FW, SX610FW, SX620

T: T10, T11, T13, T20, T21, T22, T23, T24, T25, T26, T27, T30, T33, T40W, T42WD, T50, T59, T60, T1100, T1110
TX: TX100, TX101, TX102, TX103, TX105, TX106, TX109, TX110, TX111, TX115, TX116, TX117, TX119, TX120, TX121, TX125, TX130
TX200, TX209, TX210, TX219, TX220, TX230, TX300F, TX320F
TX400, TX405, TX408, TX409, TX410, TX419, TX420W
TX510FN, TX515FN, TX525, TX550W, TX560WD, TX600FW, TX610FW, TX620FWD, TX650, TX659
TX700W, TX710W, TX720WD, TX800FW, TX810FW, TX820FWD, TX830FWD

WorkForce: WorkForce 30, 40, 42, 310, 315, 320, 323, 325, 500, 520, 600, 610, 615, 630, 635, 840, 1100
WorkForce WF-7010, WF-7011, WF-7012, WF-7015, WF-7018, WF-7510, WF-7511, WF-7515, WF-7520, WF-7521, WF-7525
WorkForce WF-2010, WF-2510, WF-2520, WF-2528, WF-2530, WF-2538, WF-2540, WF-2548
WorkForce WP-4011, WPM-4011, WP-4015DN, WP-4020, WP-4022, WP-4025DW, WP-4092, WP-4095DN,
WP-4511, WP-4515, WP-4520, WP-4521, WPM-4521, WP-4525, WP-4530, WP-4531, WP-4532, WP-4533, WP-4535, WP-4540, WP-4545, WP-4590, WP-4592, WP-4595 - сброс памперса НЕдоступен. Чтение доступно.

XP: XP-20, XP-30, XP-33,
XP-100, XP102, XP-103, XP-111,
XP-200, XP-201, XP-202, XP-203, XP-204, XP-205, XP-206, XP-207, XP-208, XP-211, XP-212, XP-214, XP-215, XP-216, XP-217
XP-300, XP-302, XP-303, XP-305, XP-306, XP-311, XP-312, XP-313, XP-315,
XP-400, XP-402, XP-403, XP-405, XP-406, XP-411, XP-412, XP-413, XP-415, XP-510,
XP-600, XP-610, XP-605, XP-615, XP-700, XP-710, XP-750, XP-800, XP-810, XP-850, XP-950

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

Пользование программой бесплатное. Поддерживаются все функции в т.ч. и функция сброса памперса. Для некоторых моделей эта функция работает после ввода кода сброса памперса. Код можно купить в интернет-магазине - Приобрести код для сброса памперса.

Программа PrintHelp - универсальный инструмент для сервисного инженера и домашнего пользователя струйного принтера!

Ссылки:


* В статье использованы материалы с http://www.spsystems.lv/

понедельник, 16 июня 2014 г.

Реализация MD5 на чистом РHP

Всем известно что в PHP есть встроенная функция MD5 для расчета MD5 хеша. Но как быть, если нужно посчитать MD5 хеш с измененными значениями инициализирующего вектора или другими изменениями? Ниже приводится вариант исходного кода расчета MD5 на "чистом PHP", т.е. фактически мы переписали функцию MD5:

<?php

function MD($string){
    $a = "67452301";
    $b = "efcdab89";
    $c = "98badcfe";
    $d = "10325476";

    $A = $a ;
    $B = $b ;
    $C = $c ;
    $D = $d ;
    $words = ConvertToArray($string);  
    for($i = 0; $i <= count($words)/16-1; $i++){
            $a  = $A;
            $b  = $B;
            $c  = $C;
            $d  = $D;

            /* ROUND 1 */
            FF ($A, $B, $C, $D, $words[0 + ($i * 16)], 7, "d76aa478");
            FF ($D, $A, $B, $C, $words[1 + ($i * 16)], 12, "e8c7b756");
            FF ($C, $D, $A, $B, $words[2 + ($i * 16)], 17, "242070db");
            FF ($B, $C, $D, $A, $words[3 + ($i * 16)], 22, "c1bdceee");
            FF ($A, $B, $C, $D, $words[4 + ($i * 16)], 7, "f57c0faf");
            FF ($D, $A, $B, $C, $words[5 + ($i * 16)], 12, "4787c62a");
            FF ($C, $D, $A, $B, $words[6 + ($i * 16)], 17, "a8304613");
            FF ($B, $C, $D, $A, $words[7 + ($i * 16)], 22, "fd469501");
            FF ($A, $B, $C, $D, $words[8 + ($i * 16)], 7, "698098d8");
            FF ($D, $A, $B, $C, $words[9 + ($i * 16)], 12, "8b44f7af");
            FF ($C, $D, $A, $B, $words[10 + ($i * 16)], 17, "ffff5bb1");
            FF ($B, $C, $D, $A, $words[11 + ($i * 16)], 22, "895cd7be");
            FF ($A, $B, $C, $D, $words[12 + ($i * 16)], 7, "6b901122");
            FF ($D, $A, $B, $C, $words[13 + ($i * 16)], 12, "fd987193");
            FF ($C, $D, $A, $B, $words[14 + ($i * 16)], 17, "a679438e");
            FF ($B, $C, $D, $A, $words[15 + ($i * 16)], 22, "49b40821");

            /* ROUND 2 */
            GG ($A, $B, $C, $D, $words[1 + ($i * 16)], 5, "f61e2562");
            GG ($D, $A, $B, $C, $words[6 + ($i * 16)], 9, "c040b340");
            GG ($C, $D, $A, $B, $words[11 + ($i * 16)], 14, "265e5a51");
            GG ($B, $C, $D, $A, $words[0 + ($i * 16)], 20, "e9b6c7aa");
            GG ($A, $B, $C, $D, $words[5 + ($i * 16)], 5, "d62f105d");
            GG ($D, $A, $B, $C, $words[10 + ($i * 16)], 9, "2441453");
            GG ($C, $D, $A, $B, $words[15 + ($i * 16)], 14, "d8a1e681");
            GG ($B, $C, $D, $A, $words[4 + ($i * 16)], 20, "e7d3fbc8");
            GG ($A, $B, $C, $D, $words[9 + ($i * 16)], 5, "21e1cde6");
            GG ($D, $A, $B, $C, $words[14 + ($i * 16)], 9, "c33707d6");
            GG ($C, $D, $A, $B, $words[3 + ($i * 16)], 14, "f4d50d87");
            GG ($B, $C, $D, $A, $words[8 + ($i * 16)], 20, "455a14ed");
            GG ($A, $B, $C, $D, $words[13 + ($i * 16)], 5, "a9e3e905");
            GG ($D, $A, $B, $C, $words[2 + ($i * 16)], 9, "fcefa3f8");
            GG ($C, $D, $A, $B, $words[7 + ($i * 16)], 14, "676f02d9");
            GG ($B, $C, $D, $A, $words[12 + ($i * 16)], 20, "8d2a4c8a");

            /* ROUND 3 */
            HH ($A, $B, $C, $D, $words[5 + ($i * 16)], 4, "fffa3942");
            HH ($D, $A, $B, $C, $words[8 + ($i * 16)], 11, "8771f681");
            HH ($C, $D, $A, $B, $words[11 + ($i * 16)], 16, "6d9d6122");
            HH ($B, $C, $D, $A, $words[14 + ($i * 16)], 23, "fde5380c");
            HH ($A, $B, $C, $D, $words[1 + ($i * 16)], 4, "a4beea44");
            HH ($D, $A, $B, $C, $words[4 + ($i * 16)], 11, "4bdecfa9");
            HH ($C, $D, $A, $B, $words[7 + ($i * 16)], 16, "f6bb4b60");
            HH ($B, $C, $D, $A, $words[10 + ($i * 16)], 23, "bebfbc70");
            HH ($A, $B, $C, $D, $words[13 + ($i * 16)], 4, "289b7ec6");
            HH ($D, $A, $B, $C, $words[0 + ($i * 16)], 11, "eaa127fa");
            HH ($C, $D, $A, $B, $words[3 + ($i * 16)], 16, "d4ef3085");
            HH ($B, $C, $D, $A, $words[6 + ($i * 16)], 23, "4881d05");
            HH ($A, $B, $C, $D, $words[9 + ($i * 16)], 4, "d9d4d039");
            HH ($D, $A, $B, $C, $words[12 + ($i * 16)], 11, "e6db99e5");
            HH ($C, $D, $A, $B, $words[15 + ($i * 16)], 16, "1fa27cf8");
            HH ($B, $C, $D, $A, $words[2 + ($i * 16)], 23, "c4ac5665");

            /* ROUND 4 */
            II ($A, $B, $C, $D, $words[0 + ($i * 16)], 6, "f4292244");
            II ($D, $A, $B, $C, $words[7 + ($i * 16)], 10, "432aff97");
            II ($C, $D, $A, $B, $words[14 + ($i * 16)], 15, "ab9423a7");
            II ($B, $C, $D, $A, $words[5 + ($i * 16)], 21, "fc93a039");
            II ($A, $B, $C, $D, $words[12 + ($i * 16)], 6, "655b59c3");
            II ($D, $A, $B, $C, $words[3 + ($i * 16)], 10, "8f0ccc92");
            II ($C, $D, $A, $B, $words[10 + ($i * 16)], 15, "ffeff47d");
            II ($B, $C, $D, $A, $words[1 + ($i * 16)], 21, "85845dd1");
            II ($A, $B, $C, $D, $words[8 + ($i * 16)], 6, "6fa87e4f");
            II ($D, $A, $B, $C, $words[15 + ($i * 16)], 10, "fe2ce6e0");
            II ($C, $D, $A, $B, $words[6 + ($i * 16)], 15, "a3014314");
            II ($B, $C, $D, $A, $words[13 + ($i * 16)], 21, "4e0811a1");
            II ($A, $B, $C, $D, $words[4 + ($i * 16)], 6, "f7537e82");
            II ($D, $A, $B, $C, $words[11 + ($i * 16)], 10, "bd3af235");
            II ($C, $D, $A, $B, $words[2 + ($i * 16)], 15, "2ad7d2bb");
            II ($B, $C, $D, $A, $words[9 + ($i * 16)], 21, "eb86d391");

            $A=AddUnsigned(hexdec2($A),hexdec2($a));
            $B=AddUnsigned(hexdec2($B),hexdec2($b));
            $C=AddUnsigned(hexdec2($C),hexdec2($c));
            $D=AddUnsigned(hexdec2($D),hexdec2($d));  
    }

   $MD5 = WordToHex($A).WordToHex($B).WordToHex($C).WordToHex($D);
   return $MD5;
}

function WordToHex($lValue) {
    $WordToHexValue = "";
    for ($lCount = 0;$lCount<=3;$lCount++) {
        $lByte = (hexdec2($lValue)>>($lCount*8)) & 255;
        $C = dechex($lByte);
        $WordToHexValue .= (strlen($C)=='1')?"0".dechex($lByte):dechex($lByte);
    }
    return $WordToHexValue;
}

function F($X, $Y, $Z){  
        $X = hexdec2($X);
        $Y = hexdec2($Y);
        $Z = hexdec2($Z);
        $calc = (($X & $Y) | ((~ $X) & $Z)); // X AND Y OR NOT X AND Z
        return  $calc;
}

function G($X, $Y, $Z){
        $X = hexdec2($X);
        $Y = hexdec2($Y);
        $Z = hexdec2($Z);
        $calc = (($X & $Z) | ($Y & (~ $Z))); // X AND Z OR Y AND NOT Z
        return  $calc;
}

function H($X, $Y, $Z){
        $X = hexdec2($X);
        $Y = hexdec2($Y);
        $Z = hexdec2($Z);
        $calc = ($X ^ $Y ^ $Z); // X XOR Y XOR Z
        return  $calc;
}

function I($X, $Y, $Z){
        $X = hexdec2($X);
        $Y = hexdec2($Y);
        $Z = hexdec2($Z);
        $calc = ($Y ^ ($X | (~ $Z))) ; // Y XOR (X OR NOT Z)
        return  $calc;
}

function AddUnsigned($lX,$lY) {
    $lX8 = ($lX & 0x80000000);
    $lY8 = ($lY & 0x80000000);
    $lX4 = ($lX & 0x40000000);
    $lY4 = ($lY & 0x40000000);
    $lResult = ($lX & 0x3FFFFFFF)+($lY & 0x3FFFFFFF);
    if ($lX4 & $lY4) {
        $res = ($lResult ^ 0x80000000 ^ $lX8 ^ $lY8);
        if($res < 0)
            return '-'.dechex(abs($res));
        else
            return dechex($res);
    }
    if ($lX4 | $lY4) {
        if ($lResult & 0x40000000) {
            $res = ($lResult ^ 0xC0000000 ^ $lX8 ^ $lY8);
            if($res < 0)
                return '-'.dechex(abs($res));
            else
                return dechex($res);
        } else {
            $res = ($lResult ^ 0x40000000 ^ $lX8 ^ $lY8);
            if($res < 0)
                return '-'.dechex(abs($res));
            else
                return dechex($res);
        }
    } else {
        $res = ($lResult ^ $lX8 ^ $lY8);
        if($res < 0)
            return '-'.dechex(abs($res));
        else
            return dechex($res);
    }
}
function hexdec2($hex , $debug = false)
{
    if(substr($hex, 0,1) == "-")
    {
        return doubleval('-'.hexdec("0x". str_replace("-", "", $hex )));
    }
    return hexdec("0x".$hex);
}

function FF(&$A, $B, $C, $D, $M, $s, $t){
        $Level1 = hexdec2(AddUnsigned( F($B, $C, $D) , bindec($M) ));
        $level2 = hexdec2(AddUnsigned($Level1, hexdec2($t)));
        $A = hexdec2(AddUnsigned(hexdec2($A),$level2));
        $A = rotate($A, $s);
        $A =  AddUnsigned($A , hexdec2($B)) ;
}

function GG(&$A, $B, $C, $D, $M, $s, $t){
        $Level1 = hexdec2(AddUnsigned( G($B, $C, $D) , bindec($M) ));
        $level2 = hexdec2(AddUnsigned($Level1, hexdec2($t)));
        $A = hexdec2(AddUnsigned(hexdec2($A),$level2));
        $A = rotate($A, $s);
        $A =  AddUnsigned($A , hexdec2($B)) ;
}

function HH(&$A, $B, $C, $D, $M, $s, $t){
        $Level1 = hexdec2(AddUnsigned( H($B, $C, $D) , bindec($M) ));
        $level2 = hexdec2(AddUnsigned($Level1, hexdec2($t)));
        $A = hexdec2(AddUnsigned(hexdec2($A),$level2));
        $A = rotate($A, $s);
        $A =  AddUnsigned($A , hexdec2($B)) ;
}

function II(&$A, $B, $C, $D, $M, $s, $t){
        $Level1 = hexdec2(AddUnsigned( I($B, $C, $D) , bindec($M) ));
        $level2 = hexdec2(AddUnsigned($Level1, hexdec2($t)));
        $A = hexdec2(AddUnsigned(hexdec2($A),$level2));
        $A = rotate($A, $s);
        $A =  AddUnsigned($A , hexdec2($B)) ;
}

function rotate ($decimal, $bits , $debug = false) {
    return  (($decimal << $bits) |  shiftright($decimal, (32 - $bits))  & 0xffffffff);
}
function shiftright($decimal , $right)
{
    if($decimal < 0)
    {
        $res = decbin($decimal >> $right);
        for ($i=0; $i < $right; $i++) {
            $res[$i] = "";
        }
        return bindec($res) ;
    } else
    {
        return ($decimal >> $right);
    }
}

function ConvertToArray($string) {
    $lWordCount;
    $lMessageLength = strlen($string);
    $lNumberOfWords_temp1=$lMessageLength + 8;
    $lNumberOfWords_temp2=($lNumberOfWords_temp1-($lNumberOfWords_temp1 % 64))/64;
    $lNumberOfWords = ($lNumberOfWords_temp2+1)*16;
    $lWordArray=Array("");
    $lBytePosition = 0;
    $lByteCount = 0;
    while ( $lByteCount < $lMessageLength ) {
        $lWordCount = ($lByteCount-($lByteCount % 4))/4;
        $lBytePosition = ($lByteCount % 4)*8;
        if(!isset($lWordArray[$lWordCount]))
            $lWordArray[$lWordCount] = 0;
        $lWordArray[$lWordCount] = ($lWordArray[$lWordCount] | (ord($string[$lByteCount])<<$lBytePosition));
        $lByteCount++;
    }
    $lWordCount = ($lByteCount-($lByteCount % 4))/4;
    $lBytePosition = ($lByteCount % 4)*8;
    if(!isset($lWordArray[$lWordCount]))
        $lWordArray[$lWordCount] = 0;
    $lWordArray[$lWordCount] = $lWordArray[$lWordCount] | (0x80<<$lBytePosition);
    $lWordArray[$lNumberOfWords-2] = $lMessageLength<<3;
    $lWordArray[$lNumberOfWords-1] = $lMessageLength>>29;
    for ($i=0; $i < $lNumberOfWords; $i++) {
        if(isset($lWordArray[$i]))
            $lWordArray[$i] = decbin($lWordArray[$i]);
        else
            $lWordArray[$i] = '0';
    }
    return $lWordArray;
};
$str='decker.su';
echo md5($str);
echo"\r\n";
echo MD($str);

?>

Результатом выполнения данного кода будет:

5cbcef02af47abc758c4d88ea5316f52
5cbcef02af47abc758c4d88ea5316f52

Т.о. мы видим, что написанная нами функция MD считает MD5 хеш точно также, как и встроенная md5(). Ч.т.д.