0

私は、Perl でビットコインのブレイン ウォレット ジェネレーターに取り組んでいます。秘密鍵 (インポート形式) を生成するための最後の手順 (base58 エンコード) を正しく行うことができませんでした。

この作業を行う非常に単純な bash スクリプトを見つけました。それを Perl に変換して、鍵生成を完全に Perl で行うことができるようにしたいと考えています。

次の bash コードを Perl サブルーチンに変換するのを手伝ってくれる人はいますか?

#!/bin/bash
base58=({1..9} {A..H} {J..N} {P..Z} {a..k} {m..z})
bc <<<"ibase=16; n=${1^^}; while(n>0) { n%3A ; n/=3A }" |
tac |
while read n
do echo -n ${base58[n]}
done

編集:バーマーありがとう!近いですが、機能していません。最も近い結果を得るために私がしたことは次のとおりです。

sub encode_base58sp {
    my $in = shift;
    my $out = '';
    my @base58 = (1 .. 9, 'A' .. 'H', 'J' .. 'N', 'P' .. 'Z', 'a' .. 'k', 'm' .. 'z');
    my $n = hex($in);
    while ($n > 1) {
       my $remain = $n % 58;
       $out = $base58[$remain] . $out;
       $n /= 58;
    }
    return $out;
}    

これで、最初の 9 文字は問題ありませんが、残りは間違っています... 何かアイデアはありますか?

4

2 に答える 2

0

ありがとうバーマー、

「use bigrat;」で動作しました。(Perl の透過的な BigNumber/BigRational サポート)。

解決策は次のとおりです(翻訳に基づくサブ):

 sub encode_Base58Check {
    use bigrat;
    my $in = shift;
    my $out = '';
    my @base58 = (1 .. 9, 'A' .. 'H', 'J' .. 'N', 'P' .. 'Z', 'a' .. 'k', 'm' .. 'z');
    my $n = hex($in);
    while ($n > 1) {
       $out = $base58[$n % 58] . $out;
       $n /= 58;
    }
    return $out;
}      

ありがとうございました!

于 2013-04-20T07:08:11.683 に答える