「Base58Check encoding」の版間の差分

提供: tezos-wiki
移動先: 案内検索
 
(2人の利用者による、間の3版が非表示)
1行目: 1行目:
['Bitcoin address | Bitcoin addresses]をエンコードするために、' '' 'Base58Check' ''として知られている変更されたBase 58 [http://en.wikipedia.org/wiki/Binary-to-text_encodingバイナリからテキストへのエンコーディング] ]。
+
['Bitcoin address | Bitcoin addresses]をエンコードするために、' '' 'Base58Check' ''として知られている更新されたBase 58 [http://en.wikipedia.org/wiki/Binary-to-text_encodingバイナリからテキストへのエンコーディング] ]。
  
 
より一般的には、Base58Checkエンコーディングは、Bitcoinのバイト配列を人間が入力可能な文字列にエンコードするために使用されます。
 
より一般的には、Base58Checkエンコーディングは、Bitcoinのバイト配列を人間が入力可能な文字列にエンコードするために使用されます。
38行目: 38行目:
  
 
これらの場合のハッシュ結果は常に正確に20バイトです。
 
これらの場合のハッシュ結果は常に正確に20バイトです。
これらはビッグエンディアンです(最上位バイトが最初です)。 (先頭の0x00バイトをクリップする[[bignumber]]実装に注意するか、または符号を示すために余分な0x00バイトを前に付けてください - あなたのコードはこれらのケースを適切に処理しなければなりません。そうでなければ、送信することができますが、から - それは硬貨の恒久的な損失につながる)。
+
これらはビッグエンディアンです(最上位バイトが最初です)。 (先頭の0x00バイトをクリップする[[bignumber]]実装に注意するか、または符号を示すために余分な0x00バイトを前に付けてください - あなたのコードはこれらのケースを適切に処理しなければなりません。そうでなければ、送信することは可能ですが、それは硬貨の恒久的な損失につながります)。
  
 
==秘密鍵の符号化==
 
==秘密鍵の符号化==
48行目: 48行目:
 
Bitcoinで使用されるBase58シンボルチャートは、Bitcoinプロジェクトに固有のもので、Bitcoinのコンテキスト外で使用される他のBase58実装と同じではありません(0、O、I、およびl以外の文字は除外されます)。
 
Bitcoinで使用されるBase58シンボルチャートは、Bitcoinプロジェクトに固有のもので、Bitcoinのコンテキスト外で使用される他のBase58実装と同じではありません(0、O、I、およびl以外の文字は除外されます)。
 
{| class = "wikitable"
 
{| class = "wikitable"
| - !値
+
|- !値
!キャラクター
+
!キャラクター
!値
+
!値
!キャラクター
+
!キャラクター
!値
+
!値
!キャラクター
+
!キャラクター
!値
+
!値
!キャラクター
+
!キャラクター
| -  
+
!値
 +
|-  
 
| 0
 
| 0
 
| 1
 
| 1
65行目: 66行目:
 
| 3
 
| 3
 
| 4
 
| 4
| -  
+
|-  
 
| 4
 
| 4
 
| 5
 
| 5
74行目: 75行目:
 
| 7
 
| 7
 
| 8
 
| 8
| -  
+
|-  
 
| 8
 
| 8
 
| 9
 
| 9
83行目: 84行目:
 
| 11
 
| 11
 
| C
 
| C
| -  
+
|-  
 
| 12
 
| 12
 
| D
 
| D
92行目: 93行目:
 
| 15
 
| 15
 
| G
 
| G
| -  
+
|-  
 
| 16
 
| 16
 
| H
 
| H
101行目: 102行目:
 
| 19
 
| 19
 
| L
 
| L
| -  
+
|-  
 
| 20
 
| 20
 
| M
 
| M
110行目: 111行目:
 
| 23
 
| 23
 
| Q
 
| Q
| -  
+
|-  
 
| 24
 
| 24
 
| R
 
| R
119行目: 120行目:
 
| 27
 
| 27
 
| U
 
| U
| -  
+
|-  
 
| 28
 
| 28
 
| V
 
| V
128行目: 129行目:
 
| 31
 
| 31
 
| Y
 
| Y
| -  
+
|-  
 
| 32
 
| 32
 
| Z
 
| Z
137行目: 138行目:
 
| 35
 
| 35
 
| c
 
| c
| -  
+
|-  
 
| 36
 
| 36
 
| d
 
| d
146行目: 147行目:
 
| 39
 
| 39
 
| g
 
| g
| -  
+
|-  
 
| 40
 
| 40
 
| h
 
| h
155行目: 156行目:
 
| 43
 
| 43
 
| k
 
| k
| -  
+
|-  
 
| 44
 
| 44
 
| m
 
| m
164行目: 165行目:
 
| 47
 
| 47
 
| p
 
| p
| -  
+
|-  
 
| 48
 
| 48
 
| q
 
| q
173行目: 174行目:
 
| 51
 
| 51
 
| t
 
| t
| -  
+
|-  
 
| 52
 
| 52
 
|あなた
 
|あなた
182行目: 183行目:
 
| 55
 
| 55
 
| x
 
| x
| -  
+
|-  
 
| 56
 
| 56
 
| y
 
| y
210行目: 211行目:
  
 
==バージョンバイト==
 
==バージョンバイト==
ここにいくつかの共通バージョンのバイトがあります:
+
ここにいくつかの共通バージョンのバイトがあります。
  
 
{| class = "wikitable"
 
{| class = "wikitable"
| -  
+
|-  
!10進数バージョン
+
!10進数バージョン
!先頭のシンボル
+
!先頭のシンボル
!つかいます
+
!つかいます
| -  
+
|-  
 
| 0
 
| 0
 
| 1
 
| 1
 
| Bitcoin pubkey hash
 
| Bitcoin pubkey hash
| -  
+
|-  
 
| 5
 
| 5
 
| 3
 
| 3
 
| Bitcoinスクリプトハッシュ
 
| Bitcoinスクリプトハッシュ
| -  
+
|-  
 
| 21
 
| 21
 
| 4
 
| 4
 
| Bitcoin(コンパクト)公開鍵(提案)
 
| Bitcoin(コンパクト)公開鍵(提案)
| -  
+
|-  
 
| 52
 
| 52
 
| MまたはN
 
| MまたはN
 
| Namecoin pubkey hash
 
| Namecoin pubkey hash
| -  
+
|-  
 
| 128
 
| 128
 
| 5
 
| 5
 
|秘密鍵
 
|秘密鍵
| -  
+
|-  
 
| 111
 
| 111
 
| mまたはn
 
| mまたはn
 
| Bitcoin testnet pubkeyハッシュ
 
| Bitcoin testnet pubkeyハッシュ
| -  
+
|-  
 
| 196
 
| 196
 
| 2
 
| 2

2018年5月11日 (金) 13:05時点における最新版

['Bitcoin address | Bitcoin addresses]をエンコードするために、' 'Base58Check' として知られている更新されたBase 58 [1] ]。

より一般的には、Base58Checkエンコーディングは、Bitcoinのバイト配列を人間が入力可能な文字列にエンコードするために使用されます。

背景[編集]

オリジナルのBitcoinクライアントソースコードは、base58エンコーディングの背後にある推論を説明しています。

base58.h:

//標準base-64エンコーディングの代わりにbase-58を使用する理由
// - いくつかのフォントで同じように見える0の文字を望んではいけません。
//視覚的に同じ見た目の口座番号を作成するために使用できます。
// - 英数字以外の文字列は、口座番号ほど簡単には受け入れられません。
// - 電子メールは通常、折り返す句読点がない場合は改行しません。
// - Doubleclickingは、数字がすべて英数字の場合は1つの単語として選択します。

Base58Checkの機能[編集]

Base58Checkには、次の機能があります。

  • 任意のサイズのペイロード。
  • 簡単に区別できる大文字と小文字からなる58文字の英数字記号のセット(0101は使用されません)
  • 1バイトのバージョン/アプリケーション情報。 Bitcoinアドレスはこのバイトに0x00を使用します(将来の0x05を使用する可能性があります)。
  • 4バイト(32ビット)のSHA256ベースのエラーチェックコード。このコードは、誤植を自動的に検出し、訂正するために使用できます。
  • データの先行ゼロを保存するための追加ステップ。

Base58Check文字列の作成[編集]

Base58Check文字列は、バージョン/アプリケーションバイトとペイロードから次のように作成されます。 #バージョンのバイトとペイロードのバイトを取り出し、一緒に連結します(バイト単位)。 #SHA256の最初の4バイトを取得する(SHA256(ステップ1の結果)) #手順1の結果と手順2の結果を結合します(バイト単位)。 #ステップ3の結果を一連のバイトとして扱う - 単一のビッグエンディアンのbignumberとして、通常の数学的ステップ(bignumber除算)と下で説明するbase-58アルファベットを使用してbase-58に変換します。結果は、先行するbase-58のゼロ(文字 '1')を持たないように正規化する必要があります。 #先頭の文字 '1'は、base58の値が0であり、先行ゼロの バイト '全体を表すために予約されています。シンボル。 1つ以上の先行ゼロバイトを表すのに必要なときに、1つ以上の先行する '1'が存在することがあります。ステップ3の結果であった先頭の0バイトの数を数えます(古いBitcoinアドレスの場合、バージョン/アプリケーションバイトには常に1つ以上あります;新しいアドレスの場合は決して存在しません)。先頭の各ゼロバイトは、最終結果においてそれ自身の文字「1」によって表される。 #ステップ5の1をステップ4の結果と連結します。 'これはBase58Checkの結果です。' より詳細な例は、テクニカルバックグラウンド

Bitcoinアドレスのエンコード[編集]

Bitcoinアドレスは、次のいずれかのハッシュのBase58Checkエンコードを使用して実装されます。 ( 'redeemScript' ))</ code>ここで、 redeemScript は、 'は、財布がどのように使うべきかを知っているスクリプトです。バージョン 0x05 </ code>(これらのアドレスは数字「3」で始まります) Payload to Pubkey-Hash(p2pkh):ペイロードは<code> RIPEMD160([ 'ECDSA_publicKey' ))</ code>ウォレットが秘密鍵を知っている公開鍵です。バージョン<code> 0x00 </ code>(これらのアドレスは数字「1」で始まります)

これらの場合のハッシュ結果は常に正確に20バイトです。 これらはビッグエンディアンです(最上位バイトが最初です)。 (先頭の0x00バイトをクリップするbignumber実装に注意するか、または符号を示すために余分な0x00バイトを前に付けてください - あなたのコードはこれらのケースを適切に処理しなければなりません。そうでなければ、送信することは可能ですが、それは硬貨の恒久的な損失につながります)。

秘密鍵の符号化[編集]

Base58Checkエンコードは、ウォレットのインポート形式 ECDSA秘密鍵のエンコードにも使用されます。 これは、バージョン/アプリケーションバイトに0x80が使用され、ペイロードが20ではなく32バイトであることを除いて、Bitcoinアドレスとまったく同じように形成されます(Bitcoinの秘密鍵は単一の32バイトの符号なしビッグエンディアン整数です) 。 圧縮されていない公開鍵に関連付けられた秘密鍵の場合、そのようなエンコーディングは常に '5'、またはより具体的には '5H'、 '5J'または '5K'で始まる51文字の文字列を生成します。

Base58シンボルチャート[編集]

Bitcoinで使用されるBase58シンボルチャートは、Bitcoinプロジェクトに固有のもので、Bitcoinのコンテキスト外で使用される他のBase58実装と同じではありません(0、O、I、およびl以外の文字は除外されます)。

キャラクター キャラクター キャラクター キャラクター
0 1 1 2 2 3 3 4
4 5 5 6 6 7 7 8
8 9 9 A 10 B 11 C
12 D 13 E 14 F 15 G
16 H 17 J 18 K 19 L
20 M 21 N 22 P 23 Q
24 R 25 S 26 T 27 U
28 V 29 W 30 X 31 Y
32 Z 33 a 34 b 35 c
36 d 37 e 38 f 39 g
40 h 41 i 42 j 43 k
44 m 45 n 46 o 47 p
48 q 49 r 50 s 51 t
52 あなた 53 v 54 w 55 x
56 y 57 z

address_byte_stringを符号化するアルゴリズム(1バイトのバージョン+ハッシュまたはその他のデータ+ 4バイトのチェックコードからなる)は、

   code_string = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
   x = convert_bytes_to_big_integer(hash_result)
   
   output_string = ""
   
   一方、(x> 0)
       {
           (x、剰余)=除算(x、58)
           output_string.append(code_string [remainder])
       }
   
   繰り返し(number_of_leading_zero_bytes_in_hash)
       {
       output_string.append(code_string [0]);
       }
   
   output_string.reverse();

バージョンバイト[編集]

ここにいくつかの共通バージョンのバイトがあります。

10進数バージョン 先頭のシンボル つかいます
0 1 Bitcoin pubkey hash
5 3 Bitcoinスクリプトハッシュ
21 4 Bitcoin(コンパクト)公開鍵(提案)
52 MまたはN Namecoin pubkey hash
128 5 秘密鍵
111 mまたはn Bitcoin testnet pubkeyハッシュ
196 2 Bitcoin testnetスクリプトハッシュ

アドレスプレフィックス一覧より完全なリストです。

関連項目[編集]

ソースコード[編集]

Category:技術

es:CodificaciónBase58Check