stephenhill/base58

PHP的Base58编码和解码库

v1.1.5 2019-08-22 16:51 UTC

README

Build Status Packagist Release MIT License Flattr this

长期支持

本库的每个主要版本在首次发布后都将获得5年的支持。支持将包括安全性和错误修复。

版本1的支持将一直持续到2019年9月11日。

背景

我想找一个替代Base64编码字符串的库,比特币使用的Base58编码看起来很理想。我在网上寻找现有的PHP库,可以直接将字符串转换为Base58,但找不到,或者至少找不到一个正确工作并且经过良好测试的库。

因此,我决定创建一个具有以下目标的库

  • 编码/解码PHP字符串
  • 简单易用
  • 完全测试
  • 通过Composer可用

要求

本库有以下要求

  • PHP => 5.3
  • BC Math扩展

安装

我建议您通过Composer安装此库。

{
    "require": {
        "stephenhill/base58": "~1.0"
    }
}

基本用法

require_once('vendor/autoload.php');

$base58 = new StephenHill\Base58();

$base58->encode('Hello World');
$base58->decode('JxF12TrwUP45BMd');

高级用法

默认情况下,此库选择要使用的编码服务提供商,要么是GMPService,要么是BCMathService(按此顺序)。如果您想指定其中一个服务或您自己的服务,可以在构造函数中注入它。

require_once('vendor/autoload.php');

$gmp = new StephenHill\GMPService();
$base58 = new StephenHill\Base58(null, $gmp);

$base58->encode('Hello World');
$base58->decode('JxF12TrwUP45BMd');

默认情况下,此库使用比特币的Base58字母表。如果您想使用其他变体,可以在构造函数中完成此操作。

require_once('vendor/autoload.php');

// Flickr's Base58 Alphabet
$base58 = new StephenHill\Base58('123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ');

$base58->encode('Hello World');
$base58->decode('iXf12sRWto45bmC');

测试

此库使用PHPUnit进行测试。

$ bin/phpunit

基准测试

您可以使用Athletic来基准测试此库。基准测试套件还比较了PHP内置的Base64和Base16编码。

$ bin/athletic -p benchmarks

示例输出。

StephenHill\Benchmarks\Base16Event
    Method Name    Iterations    Average Time      Ops/second
    ------------  ------------  --------------    -------------
    encodeBase16: [10,000    ] [0.0000010839939] [922,514.40637]
    decodeBase16: [10,000    ] [0.0000011516809] [868,296.03561]


StephenHill\Benchmarks\Base58BCMathEvent
    Method Name    Iterations    Average Time      Ops/second
    ------------  ------------  --------------    -------------
    encodeBase58: [10,000    ] [0.0001500048161] [6,666.45263]
    decodeBase58: [10,000    ] [0.0001741812706] [5,741.14540]


StephenHill\Benchmarks\Base58GMPEvent
    Method Name    Iterations    Average Time      Ops/second
    ------------  ------------  --------------    -------------
    encodeBase58: [10,000    ] [0.0001168665648] [8,556.76730]
    decodeBase58: [10,000    ] [0.0001385705233] [7,216.54199]


StephenHill\Benchmarks\Base64Event
    Method Name    Iterations    Average Time      Ops/second
    ------------  ------------  --------------    -------------
    encodeBase64: [10,000    ] [0.0000009050369] [1,104,927.29189]
    decodeBase64: [10,000    ] [0.0000009787321] [1,021,730.04312]

贡献

我欢迎每个人为此库做出贡献。请参阅贡献文档以获取详细信息。

许可

此库受MIT许可(MIT)的许可。请参阅许可文件以获取更多信息。

致谢

此库是从Jeremy Johnstone的 Gist上的Base58方法https://gist.github.com/jsjohnst/126883分叉的。

一些单元测试基于以下内容