1

base64 でエンコードされた文字列があります。この文字列を検索して、この文字列にエンコードされていない特定のサブ文字列が含まれているかどうかを確認するにはどうすればよいですか? その文字列をデコードして検索したくありません。

その特定の部分文字列をエンコードし、エンコードされた部分文字列を使用してエンコードされた文字列を検索できますか?

ありがとう、

4

6 に答える 6

8

おそらく最良の方法は、文字列をデコードすることです。ただし、本当に必要な場合は、完全なデコードの後に​​検索を行う代わりに、オンザフライでこれを行うことができます。1つの検索を実装し、現在検査している部分のみをデコードする必要があります。これは、メモリに2回保存したくない(または保存できない)非常に大きな文字列がある場合にのみ役立つ可能性があります。

検索する文字列が十分に長い場合は、その文字列を異なるパディング(''、'x'、'xx'など)で3回エンコードし、最初の4文字と最後の4文字がない文字列を検索することもできます(パディングと一致させたくない)。一致するものを見つけたら、位置合わせがパディングと一致していることを確認し、(パディングのために)まだ一致していない部分も配置されていることを確認する必要があります。もちろん、後者にはある程度のデコードが必要です。

于 2008-12-07T05:53:12.817 に答える
2

関連する base64 エンコーディングの正確な形式を知っていると仮定すると、3 つのオフセット (start%3 == 0、start%3 == 1、start%3 == 2) のそれぞれで発生したかのように、文字列をエンコードできます。これらの文字は周囲のデータの影響を受けるため、文字列の最初と最後を巧妙に扱う必要があります。次に、通常の IndexOf などを使用して文字列の中間部分をチェックし、開始と終了をよりスマートにチェックできます。

ただし、個人的には、この問題をすべて解決することはしません。他の提案が推奨するように、デコードしてから検索するだけです。正解するのははるかに簡単になります。

于 2008-12-07T08:55:37.457 に答える
0

Base64 は、アルゴリズムや実装が異なると、いくつかの異なる形式や意味を持つ可能性があります。ウィキペディアの例を見ても、文字のエンコードされた値が位置によって異なる場合があることがわかります。短い答え: いいえ、文字列だけをエンコードして、より大きなエンコードされたテキストを検索することはできません。

于 2008-12-07T04:48:45.100 に答える
-1

エンコードされた部分文字列を検索することはできません。検索文字列は、元の文字列のどこに表示されるかによって、異なる方法でエンコードされます。文字列全体をデコードしてから、部分文字列を検索する必要があると思います。

于 2008-12-07T04:49:42.570 に答える