PHP将TRON十六进制地址转换为Base58

PHP将TRON十六进制地址转换为Base58,php,hex,tron,base58,Php,Hex,Tron,Base58,根据官方的TRON文档,他们有基于TRONWEB的API来使用Javascript。 不过,我正在开发一个后端PHP应用程序,希望将TRON地址存储为Base58而不是十六进制格式(API输出中默认为十六进制) 那么,在PHP中有没有办法将地址从十六进制转换为Base58呢 (已经研究过了,但还没有找到任何可能的答案)是的,可以用php进行转换 首先,通过composer安装软件包iexbase/tron api 我的做法是,我有一个名为Address的类,它看起来像: 只需使用以下功能: f

根据官方的TRON文档,他们有基于TRONWEB的API来使用Javascript。

不过,我正在开发一个后端PHP应用程序,希望将TRON地址存储为Base58而不是十六进制格式(API输出中默认为十六进制) 那么,在PHP中有没有办法将地址从十六进制转换为Base58呢


(已经研究过了,但还没有找到任何可能的答案)

是的,可以用php进行转换

首先,通过composer安装软件包
iexbase/tron api

我的做法是,我有一个名为
Address
的类,它看起来像:


只需使用以下功能:

function base58_decode($base58)
{
    $alphabet = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
    $base = strlen($alphabet);
    if (is_string($base58) === false) {
        return false;
    }
    if (strlen($base58) === 0) {
        return '';
    }
    $indexes = array_flip(str_split($alphabet));
    $chars = str_split($base58);
    foreach ($chars as $char) {
        if (isset($indexes[$char]) === false) {
            return false;
        }
    }
    $decimal = $indexes[$chars[0]];
    for ($i = 1, $l = count($chars); $i < $l; $i++) {
        $decimal = bcmul($decimal, $base);
        $decimal = bcadd($decimal, $indexes[$chars[$i]]);
    }
    $output = '';
    while ($decimal > 0) {
        $byte = bcmod($decimal, 256);
        $output = pack('C', $byte) . $output;
        $decimal = bcdiv($decimal, 256, 0);
    }
    foreach ($chars as $char) {
        if ($indexes[$char] === 0) {
            $output = "\x00" . $output;
            continue;
        }
        break;
    }
    return $output;
}

function base58check_de($base58add)
{
    $address = base58_decode($base58add);
    $size = strlen($address);
    if ($size != 25) {
        return false;
    }
    $checksum = substr($address, 21);
    $address = substr($address, 0, 21);     
    $hash0 = hash("sha256", $address);
    $hash1 = hash("sha256", hex2bin($hash0));
    $checksum0 = substr($hash1, 0, 8);
    $checksum1 = bin2hex($checksum);
    if (strcmp($checksum0, $checksum1)) {
        return false;
    }
    return $address;
}
函数base58\u解码($base58)
{
$alphabet='123456789abcdefghjklmnpqrstuvwxyzabcdefghijkmnopqrstuvxyz';
$base=strlen($alphabet);
如果(是字符串($base58)==false){
返回false;
}
如果(strlen($base58)==0){
返回“”;
}
$index=array_flip(str_split($alphabet));
$chars=str_split($base58);
foreach($chars作为$char){
if(isset($index[$char])==false){
返回false;
}
}
$decimal=$index[$chars[0]];
对于($i=1,$l=count($chars);$i<$l;$i++){
$decimal=bcmul($decimal,$base);
$decimal=bcadd($decimal,$index[$chars[$i]]);
}
$output='';
而($decimal>0){
$byte=bcmod($decimal,256);
$output=pack('C',$byte)。$output;
$decimal=bcdiv($decimal,256,0);
}
foreach($chars作为$char){
如果($index[$char]==0){
$output=“\x00”。$output;
继续;
}
打破
}
返回$output;
}
函数base58check_de($base58add)
{
$address=base58_解码($base58add);
$size=strlen($address);
如果($size!=25){
返回false;
}
$checksum=substr($address,21);
$address=substr($address,0,21);
$hash0=散列(“sha256”,$address);
$hash1=hash(“sha256”,hex2bin($hash0));
$checksum0=substr($hash1,0,8);
$checksum1=bin2hex($checksum);
if(strcmp($checksum0,$checksum1)){
返回false;
}
返回$address;
}

如果您需要更多功能,请查看。

非常有用,谢谢