mirror of
https://github.com/kvazar-network/crawler-api-node.git
synced 2025-01-08 22:27:55 +00:00
89 lines
1.6 KiB
PHP
89 lines
1.6 KiB
PHP
<?php
|
|
|
|
|
|
|
|
class Crypto {
|
|
|
|
public static function bc2bin($num) {
|
|
|
|
return self::dec2base($num, 256);
|
|
}
|
|
|
|
public static function dec2base($dec, $base, $digits = false) {
|
|
|
|
if ($base < 2 || $base > 256) {
|
|
die('Invalid Base: ' . $base);
|
|
}
|
|
|
|
bcscale(0);
|
|
|
|
$value = '';
|
|
|
|
if (!$digits) {
|
|
$digits = self::digits($base);
|
|
}
|
|
|
|
while ($dec > $base - 1) {
|
|
|
|
$rest = bcmod($dec, $base);
|
|
$dec = bcdiv($dec, $base);
|
|
$value = $digits[$rest] . $value;
|
|
}
|
|
|
|
$value = $digits[intval($dec)] . $value;
|
|
|
|
return (string) $value;
|
|
}
|
|
|
|
public static function base2dec($value, $base, $digits = false) {
|
|
|
|
if ($base < 2 || $base > 256) {
|
|
die('Invalid Base: ' . $base);
|
|
}
|
|
|
|
bcscale(0);
|
|
|
|
if ($base < 37) {
|
|
$value = strtolower($value);
|
|
}
|
|
if (!$digits) {
|
|
$digits = self::digits($base);
|
|
}
|
|
|
|
$size = strlen($value);
|
|
$dec = '0';
|
|
|
|
for ($loop = 0; $loop < $size; $loop++) {
|
|
$element = strpos($digits, $value[$loop]);
|
|
$power = bcpow($base, $size - $loop - 1);
|
|
$dec = bcadd($dec, bcmul($element, $power));
|
|
}
|
|
|
|
return (string) $dec;
|
|
}
|
|
|
|
public static function digits($base) {
|
|
|
|
if ($base > 64) {
|
|
|
|
$digits = '';
|
|
|
|
for ($loop = 0; $loop < 256; $loop++) {
|
|
$digits .= chr($loop);
|
|
}
|
|
} else {
|
|
$digits = '0123456789abcdefghijklmnopqrstuvwxyz';
|
|
$digits .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-_';
|
|
}
|
|
|
|
$digits = substr($digits, 0, $base);
|
|
|
|
return (string)$digits;
|
|
}
|
|
|
|
public static function bin2bc($num) {
|
|
|
|
return self::base2dec($num, 256);
|
|
}
|
|
}
|