1

さまざまなスタック Q&A を通じて、Base64 でエンコードされた 256 ビットの数値には=パディング用の 1 つがあり、AEIMQUYcgkosw048.

==Base64 でエンコードされた 512 ビットの数値には、ビット商のために2 つのパディングがあると確信しています。

Base64 でエンコードされた 512 ビットの数値の場合、最後の文字の範囲は? ビットの商のモジュラスは同じですが、256 ビット エンコードと 512 ビット エンコードの両方で最終的な文字範囲が同じであることを意味しますか?

これは、スペースの節約と、読み取り可能な Ed25519 署名の正規表現のためのものです。


具体的には、Javabyte[64]Stringswithに変換していorg.apache.commons.codec.binary.Base64ますencodeBase64

4

1 に答える 1

1

ここでは、問題の256 ビット512 ビットの数値が、それぞれ正確に 32 バイトまたは 64 バイトを使用してエンコードされていると想定しています (つまり、先行ゼロの削除、符号付き/符号なしの問題を防ぐための追加ビットなし、ASN.1 BER エンコード ヘッダーなし) 、...)。

Base64 では、バイト トリプルごとに 4 文字を使用し、各文字は 6 ビットのデータを表します。

        byte #1    |    byte #2    |    byte #3
bit 7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0

になる

bit 5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0|5 4 3 2 1 0
      char #1  |  char #2  |  char #3  |  char #4

ウィキペディアの記事などを参照して、どの char が使用され、どのビットの 6 タペルがテーブルによって指定されるかを指定します。

したがって、256 ビットの数値の場合、 32 バイトをエンコードする必要があります。つまり、11 文字の 4 倍が使用され、最後の 4 桁は最大の 3 バイトではなく 2 バイトのみをエンコードします。つまり、16 ビットのデータのみです。したがって、最後の文字 (データがない) は であり、=最後から 2 番目の文字 (上位 4 ビットのデータしかない) は、ビットの 6 タペルを表す 1 つだけであり、下位 2 ビット0、つまり列挙した文字です。

512 ビットの数値の場合、64 バイトをエンコードする必要があります。つまり、22 文字の 4 倍が使用されます。最後の 4 桁は、最大の 3 バイトではなく 1 のみをエンコードします。つまり、8 ビットのデータのみです。したがって、最後の 2 文字 (データがない) は両方=であり、2 番目の文字 (上位 2 ビットのデータしかない) は、ビットの 6 タペルを表す 1 つだけであり、最下位 4 ビットは0、つまり文字AQgw.

ただし、前述のように、数値のエンコードについて特定の仮定を行いました...

于 2014-01-22T09:07:05.787 に答える