2017-04-24 106 views
1

我使用的轉換算法爲http://lenschulwitz.com/base58this perl code十六進制轉換爲base58-btc時出錯

  • MANY良好的轉化率,AS:18e559fc6cb0e8de2ce8b50007d474a0d886208e698a07948671e0df520c1525轉化成2gBdDRXoLPEhgf9Zd7zw5ujK1qcoPZoendBQJ22VjgqS所有44位

  • BAD CONVERSION:0ab3de5e16675aeb0c4831f5218901fec56f39cc8ad16e5559be4a0ee211f5d0轉化爲in9v3fi1cntD6ERD6QryMJq4r5BncjYZ32xZA6Uj4ST,43位!

  • 其他BAD:00000000000000000000000000000000000000000000000000000000000000d011111111111111111111111111111114b

什麼是錯的Perl代碼? 我可以在base58-btc中使用某種填充?


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

+0

你怎麼知道這是錯的?你的第二個輸入是更小的... – aschepler

+0

@aschepler不,自己檢查,兩個輸入都是64個十六進制數字。 –

+0

@aschepler我編輯了更多的例子 –

回答

0

誰將會回答問題與其他交談者一起測試,如bs58 js lib,全部產生相同且一致的結果。

看來XY problem ......或許真正的問題是「base58比特幣使用固定大小的表示?」我可以使用一些東西作爲墊1嗎?

但它也是答案的一部分,沒有編輯問題(恢復)和程序的答案。


...這是「不兼容」基地之間的轉換(!),所以我覺得是不可能的 ... 58=2*29不是16=2^4多......只有當數字是多重的2 ...但:

  • base50(「E」)= hex(「0D」); base58(「1E」)=十六進制(「000D」); ...填充數字的數量轉換爲多個...

  • 什麼問題的剪切/添加填充? base50(「E」)=十六進制(「D」); base58(「1E」)=十六進制(「D」); base50( 「E」)=十六進制( 「000000D」); base50( 「1111111111E」)=十六進制( 「d」); ...不是一個問題,所以可以使用填充算法(填充0或1)。

解決方案:好的,讓pad,轉換時填充1s少於44位。