我使用http://lenschulwitz.com/base58,this perl code的转换算法。
很多好的转换,因为:18e559fc6cb0e8de2ce8b50007d474a0d886208e698a07948671e0df520c1525
已转换为2gBdDRXoLPEhgf9Zd7zw5ujK1qcoPZoendBQJ22VjgqS
,所有44位。
BAD 转化:0ab3de5e16675aeb0c4831f5218901fec56f39cc8ad16e5559be4a0ee211f5d0
已转换为in9v3fi1cntD6ERD6QryMJq4r5BncjYZ32xZA6Uj4ST
,43位数字!
其他不良:00000000000000000000000000000000000000000000000000000000000000d0
至11111111111111111111111111111114b
Perl代码有什么问题? 我可以在base58-btc中使用某种填充?
PS:我可以使用sudo apt-get install libbase58-0
作为is reliable at UBUNTU的东西......但需要一个Perl接口。
答案 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位。