首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对字符串进行base58编码?

如何对字符串进行base58编码?
EN

Stack Overflow用户
提问于 2012-01-23 11:13:01
回答 5查看 19.8K关注 0票数 10
代码语言:javascript
复制
char (* text)[1][45+1];
text = calloc(5000,(130+1));
strcpy(0[*text],"sometext)");

现在我想将"sometext“编码为base58,但是,我不知道如何编码,而且奇怪的是,在C中没有一个BASE58示例。

我感兴趣的base58编码使用以下符号:

123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ

为了减少误读的风险,对其进行了优化,例如0和O都消失了。

别介意变量的奇怪分配和声明,我在做实验。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-23 11:20:51

你不应该编码字符串,你应该编码整数。

如果以字符串开头,则必须首先决定如何将其解释为整数(可能是base128或其他什么),然后在base58中重新编码。

票数 8
EN

Stack Overflow用户

发布于 2013-05-25 21:49:26

Satoshi有参考实现(https://github.com/bitcoin/bitcoin/blob/master/src/base58.h)

但是,他使用了一些实用工具bignum类来实现它,它是在C++中实现的。如果您可以访问bignum库,您只需将其除以58,直到该数字被分解。如果你没有大型图书馆,AFAIK你就倒霉了。

票数 7
EN

Stack Overflow用户

发布于 2013-08-26 19:17:36

下面是我为Amithing(整数之外的)创建的大型数字的PHP实现(Integer -> http://php.net/manual/en/language.types.integer.php)。

例如,尝试下面的示例(不要忘记以字符串格式将ID传递给函数。使用PHP函数strval():

代码语言:javascript
复制
$number = '123456789009876543211234567890';
$result = base58_encode($number);
echo('Encoded: ' . $result . '<br>');
echo('Decoded: ' . base58_decode($result) . '<br>');

重要:您可以考虑通过添加某种密钥/密码/加密来更改此例程,以确保其他人无法解码您的数据库ID。

代码语言:javascript
复制
function base58_encode($input)
{
    $alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
    $base_count = strval(strlen($alphabet));
    $encoded = '';
    while (floatval($input) >= floatval($base_count))
    {
        $div = bcdiv($input, $base_count);
        $mod = bcmod($input, $base_count);
        $encoded = substr($alphabet, intval($mod), 1) . $encoded;
        $input = $div;
    }
    if (floatval($input) > 0)
    {
        $encoded = substr($alphabet, intval($input), 1) . $encoded;
    }
    return($encoded);
}

function base58_decode($input)
{
    $alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
    $base_count = strval(strlen($alphabet));
    $decoded = strval(0);
    $multi = strval(1);
    while (strlen($input) > 0)
    {
        $digit = substr($input, strlen($input) - 1);
        $decoded = bcadd($decoded, bcmul($multi, strval(strpos($alphabet, $digit))));
        $multi = bcmul($multi, $base_count);
        $input = substr($input, 0, strlen($input) - 1);
    }
    return($decoded);
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8970715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档