если секретный ключ является шестнадцатеричной строкой, попробуйте выполнить следующие функции.
(Извинения автору, я не помню, где я нашел этот код)
определить ("ADDRESSVERSION","00"); // это шестнадцатеричный байт
Функция decodeHex ($ шестигранный)
{
$ Гекс = strtoupper ($ гекс);
$ = Символы"0123456789abcdef";
$ Возврата ="0";
для ($ I = 0; $ я {
$ тока = (строка) StrPos ($ си, $ шестигранных [$ я]);
$ Возврата = (строка) bcmul ($ возврата,"16", 0);
$ Возврата = (строка) bcadd ($ возврат, $ ток, 0);
}
вернуть $ вернуться;
}
Функция encodeHex ($ Декабрь)
{
$ = Символы"0123456789abcdef";
$ Возврата ="";
в то время как (bccomp ($ Декабрь, 0) == 1)
{
$ DV = (строка) bcdiv ($ Декабря,"16", 0);
$ Бэр = (целое число) bcmod ($ декабря,"16");
$ Декабрь = $ DV;
$ Возврата = $ возврата $ символы [$ бэр].
}
вернуться strrev ($ возврата);
}
Функция decodeBase58 ($ base58)
{
$ Origbase58 = $ base58;
$ = Символы"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
$ Возврата ="0";
для ($ I = 0; $ я {
$ тока = (строка) StrPos ($ си, $ base58 [$ я]);
$ Возврата = (строка) bcmul ($ возврата,"58", 0);
$ Возврата = (строка) bcadd ($ возврат, $ ток, 0);
}
$ Возврата = encodeHex ($ возврата);
// ведущие нули
для ($ I = 0; $ я {
$ Возврата ="00". $ Возврата;
}
если (STRLEN ($ возврат)% 2! = 0)
{
$ Возврата ="0". $ Возврата;
}
вернуть $ вернуться;
}
Функция encodeBase58 ($ шестигранный)
{
если (STRLEN ($ шестигранный)% 2! = 0)
{
умереть("encodeBase58: нечетное число шестнадцатеричных символов");
}
$ Orighex = $ шестигранный;
$ = Символы"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
$ Гекс = decodeHex ($ гекс);
$ Возврата ="";
в то время как (bccomp ($ шестигранный, 0) == 1)
{
$ DV = (строка) bcdiv ($ шестигранной,"58", 0);
$ Бэр = (целое число) bcmod ($ гекс,"58");
$ Шестигранной = $ DV;
$ Возврата = $ возврата $ символы [$ бэр].
}
$ Возврата = strrev ($ возврата);
// ведущие нули
для ($ I = 0; $ я {
$ Возврата ="1". $ Возврата;
}
вернуть $ вернуться;
}
Функция hash160ToAddress ($ hash160, $ addressversion = ADDRESSVERSION)
{
$ Hash160 = $ addressversion $ hash160.
$ Проверка = упаковка ("ЧАС*" , $ Hash160);
$ Проверка = хэш ("sha256", Хэш ("sha256", $ Проверить, верно));
$ Check = зиЬзЬг ($ проверки, 0,8);
$ Hash160 = strtoupper ($ hash160 $ чек.);
вернуться encodeBase58 ($ hash160);
}
Функция addressToHash160 ($ адр)
{
$ Адр = decodeBase58 ($ адр);
$ Адр = зиЬзЬги ($ адр, 2, STRLEN ($ адр) -10);
вернуть $ адр;
}
Функция checkAddress ($ адр, $ addressversion = ADDRESSVERSION)
{
$ Адр = decodeBase58 ($ адр);
если (STRLEN ($ адр)! = 50)
{
вернуться ложным;
}
$ Версия = зиЬзЬги ($ адр, 0,2);
если (HexDec ($ версия)>HexDec ($ addressversion))
{
вернуться ложным;
}
$ Check = зиЬзЬг ($ ADDR, 0, STRLEN ($ ADDR) -8);
$ Проверка = упаковка ("ЧАС*" , $ Чек);
$ Проверка = strtoupper (хэш ("sha256", Хэш ("sha256", $ Проверка, правда)));
$ Check = зиЬзЬг ($ проверки, 0,8);
возвращение $ проверка == зиЬзЬг ($ адр, STRLEN ($ адр) -8);
}
Функция hash160 ($ данных)
{
$ Данные = упаковка ("ЧАС*" , $ Данных);
вернуть strtoupper (хэш ("ripemd160", Хэш ("sha256", $ Данные, правда)));
}
Функция pubKeyToAddress ($ Публичная)
{
вернуться hash160ToAddress (hash160 ($ Публичных));
}
Функция remove0x ($ строка)
{
если (подстрока ($ строка, 0,2) =="0x"|| SUBSTR ($ строка, 0,2) =="0X")
{
$ Строка = зиЬзЬги ($ строки, 2);
}
вернуть $ строку;
}