十六进制转换为base58-btc时出错

时间:2017-04-24 23:33:37

标签: perl base-conversion

我使用http://lenschulwitz.com/base58this perl code的转换算法。

  • 很多好的转换,因为:18e559fc6cb0e8de2ce8b50007d474a0d886208e698a07948671e0df520c1525已转换为2gBdDRXoLPEhgf9Zd7zw5ujK1qcoPZoendBQJ22VjgqS所有44位

  • BAD 转化:0ab3de5e16675aeb0c4831f5218901fec56f39cc8ad16e5559be4a0ee211f5d0已转换为in9v3fi1cntD6ERD6QryMJq4r5BncjYZ32xZA6Uj4ST,43位数字!

  • 其他不良:00000000000000000000000000000000000000000000000000000000000000d011111111111111111111111111111114b

Perl代码有什么问题? 我可以在base58-btc中使用某种填充?

PS:我可以使用sudo apt-get install libbase58-0作为is reliable at UBUNTU的东西......但需要一个Perl接口。

2 个答案:

答案 0 :(得分:0)

我建议你安装Encode::Base58,而不是调试那些布局不合理的代码。 要么 Encode::Base58::GMP

如果您发现结果不正确,那么这两个模块都有维护人员会回答问题

答案 1 :(得分:0)

使用其他对象进行测试,如bs58 js lib,所有这些都会产生相同且一致的结果。

似乎XY problem ...也许真正的问题是" base58比特币使用固定大小的表示?"我可以用东西作为垫1吗?

但它也是答案的一部分,没有编辑问题(还原)和程序答案。

...这是"不兼容的转换"基地(!),所以我认为是不可能的 ... 58=2*29不是16=2^4的倍数...仅当数字是2的倍数时......但是:

  • base50(" E")= hex(" 0D"); base58(" 1E")= hex(" 000D"); ...填充数字的数量被转换为多个......

  • 填充的剪切/添加问题是什么? base50(" E")= hex(" D"); base58(" 1E")= hex(" D"); base50(" E")=十六进制(" 000000D&#34); base50(" 1111111111E")=十六进制(" d&#34); ......看起来不是问题,所以可以使用填充算法(填0或1)。

解决方案:好的,让垫,转换时填充1s少于44位。