web-dev-qa-db-ja.com

base64でエンコードされた文字列に空白を含めることはできますか?

Base64でエンコードされた文字列に空白が含まれている可能性がありますか?具体的には、文字列のendに空白を含めることができますか?

PS。私はここで「MySQLは文字列をVARCHARフィールドに格納するときに末尾の空白を削除する」全体について考えています;-)

28
Dougal

すべきではありませんが、そうなる可能性があります。

エンコードアルファベットはA-Za-z 0-9 + /のみで構成されている必要があるため、有効なbase64文字列には空白を含めないでください。

ただし、エンコードされたデータに「+」文字が含まれていて、データがURLで渡された場合、意図せずにスペースに変換される可能性があります。したがって、これらの状況では、スペースが含まれているように見えるbase64文字列に遭遇する可能性があります。

この場合は、デコードする前にスペースをプラスに置き換えてください。

PS。ここで「MySQLは文字列をVARCHARフィールドに格納するときに末尾の空白を削除する」全体について考えています。

余談ですが、MySQL 5.0.3の時点では、varcharの末尾の空白が何気なく削除されることはありません。

13
Gavin Jackson

はい。 Base64でエンコードされた文字列には空白を含めることができますが、文字は重要ではありません。したがって、データベースがスペースをトリミングしても問題ありません。

実際のところ、元のMIME仕様では、Base64文字列を72文字の行に分割することを推奨しています。 XMLのbase64Binaryには、改行、タブ、スペースも含まれる場合があります。

PHPでは、base64_decode()はすべての白抜き文字を削除するため、心配する必要はありません。

3
ZZ Coder

ウィキペディアは、Base64エンコーディングには数え切れないほどのバリエーションがあることを示唆しています。

http://en.wikipedia.org/wiki/Base64

したがって、答えはおそらく文字列で何をする必要があるかによって異なります。しかし、あえてPHP with base64_encode()で作成したので、空白を追加しても安全だと思われます。

<?php

$original_data = 'Lorem ipsum dolor sit amet';
$encoded_data = base64_encode($original_data);
$padded_data = '    ' . chunk_split($encoded_data, 3, '  ') . '    ';

echo base64_decode($padded_data); // Prints 'Lorem ipsum dolor sit amet'

?>
1

いいえ、but-base64ユーティリティの一部の実装では、出力に改行が追加され、空白が一部であるかのように見える場合があります。出力。このケースが発生した場合は、base64のバージョンに応じて、次のいずれかを実行して、この動作をオフにするか、改行文字を削除できます。

base64 -w 0 < input.txt
base64 < input | tr -d \\n

詳細については、この質問を参照してください: https://superuser.com/questions/1225134/why-does-the-base64-of-a-string-contain-n/1225334

0
mcw

私の知る限りではできません。基本的に、Base64文字列は64文字のセットで構成する必要があります。 A-Z、a-z、0-9は62になります-他の2つは実装に依存します。

私の知る限り、空白を文字として使用する実装があります。その主な理由は読みやすさです。つまり、Base64文字列は簡単に印刷して認識できる必要があります。

あなたはおそらくそれについてのより多くの情報を ウィキペディア で見つけるでしょう。

0
Ivan Zlatanov