質問

32文字の文字列(MD5ハッシュ)があり、base64を使用してエンコードした場合、エンコードされた文字列の最大長はどれくらいですか?

役に立ちましたか?

解決

MD5値はです 常に22(有用な)文字長 Base64表記で。 MD5ハッシュをエンコードすると、多くのBase64アルゴリズムもパディングの2文字を追加し、合計24文字になります。パディングは有用な情報を追加せず、破棄することができます。最初の22文字のみが重要です。

その理由は次のとおりです。

MD5ハッシュは128ビット値です。 Base64文字列のすべての文字には6ビットの情報が含まれています。これは、キャラクターに64の可能な値があり、64に達するには6つのパワーがかかるからです。すべての文字に6ビットの情報があるため、21文字は126ビットの情報を持っています。 22文字には132ビットの情報が含まれています。 128ビットは21文字以内に収まることはできませんが、22文字以内(余裕が少しあります)に収まるため、128ビットの値は常にBase64で22文字として表されます。

パディングに関するメモ:

上記で、MD5値をエンコードするときに、多くのBase64エンコードアルゴリズムがパディングの文字を追加することを述べました。これは、Base64が4文字として3バイトの情報を表すためです。 MD5には16バイトの情報があるため、多くのBase64エンコードアルゴリズムが「==」を追加して、16バイトの入力が3の次の倍数に2バイト不足していることを指定し、18バイトでした。これらの2つの等しい標識は、文字列に情報をまったく追加せず、保存するときに破棄することができます。

他のヒント

に従って http://en.wikipedia.org/wiki/base64

「nバイトの入力が与えられた場合、出力は(n + 2 - ((n + 2)%3)) / 3 * 4バイトであり、大きなnの場合はn * 4 /3または1.33333nに収束することに注意してください。 。」

したがって、それは((32 + 2-(32 + 2)%3)) / 3 * 4 = 34-(34%3) / 3 * 4 =(34-1) / 3 * 4 = 33/3です。 *4 = 44文字。

常に生のバイナリ形式(128ビット)で抽出し、ベース64に直接エンコードできます。これは、32の代わりに16バイトを変換することを意味します。これは、ベース64がエンコードされると24バイトになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top