【问题标题】:Error in hexadecimal conversion to base58-btc十六进制转换为 base58-btc 时出错
【发布时间】:2017-04-24 23:33:36
【问题描述】:

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

  • 很多不错的转换,例如:18e559fc6cb0e8de2ce8b50007d474a0d886208e698a07948671e0df520c1525 已转换为 2gBdDRXoLPEhgf9Zd7zw5ujK1qcoPZoendBQJ22VjgqS所有 44 位数字

  • 错误转换:0ab3de5e16675aeb0c4831f5218901fec56f39cc8ad16e5559be4a0ee211f5d0 已转换为 in9v3fi1cntD6ERD6QryMJq4r5BncjYZ32xZA6Uj4ST,43 位!

  • 其他错误:00000000000000000000000000000000000000000000000000000000000000d011111111111111111111111111111114b

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


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

【问题讨论】:

  • 你怎么知道错了?您的第二个输入更小...
  • @aschepler 不,你自己检查一下,两个输入都是 64 位十六进制数字。
  • @aschepler 我编辑了多个示例

标签: perl base-conversion


【解决方案1】:

建议你安装Encode::Base58,而不是调试那些布局不佳的代码 或者 Encode::Base58::GMP

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

【讨论】:

    【解决方案2】:

    bs58 js lib 等其他转换器一起测试,都产生了相同且一致的结果。

    看来XY problem...也许真正的问题是“base58 比特币使用固定大小表示?”我可以用什么东西作为pad 1s吗?

    但它也是答案的一部分,未编辑问题(已还原)并处理答案。


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

    • base50("E") = 十六进制("0D"); base58("1E") = 十六进制("000D"); ...填充位数转换为倍数...

    • 剪切/添加填充的问题是什么? base50("E") = 十六进制("D"); base58("1E") = 十六进制("D"); base50("E")=hex("000000D"); base50("1111111111E")=十六进制("D"); ... 似乎没有问题,所以可以使用 padding-algorithm(填充 0 或 1)。

    解决方案:好的,让 pad,在转换后填充 1 的位数少于 44。

    【讨论】:

      猜你喜欢
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2021-05-19
      • 2022-01-16
      • 1970-01-01
      • 2018-09-04
      • 2016-02-24
      相关资源
      最近更新 更多