0

base64でエンコードされた文字列に英数字以外の文字が含まれないようにする方法はありますか?

たとえば、エンコードする長い文字列がある場合、base64でエンコードしたときに、エンコードされた文字列に文字と数字のみが含まれるようにするために、追加または追加できるものはありますか?このようなもの:

弦:192.168.1.1

エンコード:MTkyLjE2OC4xLjE=<-等号を「削除」したい。

文字列の最後に追加しようと}しましたが(新しい文字列は現在192.168.1.1})、これは機能しました(新しいエンコードされた文字列MTkyLjE2OC4xLjF9:)が、すべての組み合わせが機能することを確認する方法はありますか?

これは可能ですか?

4

2 に答える 2

1

長さくらいです。= 記号は、出力を 4 つの base64 文字の倍数にするためのパディングです。3 文字は 4 つの base64 文字に変換されるため、入力文字列の長さを 3 文字の倍数にする必要があります。あなたの場合:

192.168.1.1 - 11 characters long, base64 ends with =
192.168.1.1$ - 12 characters long, base64 doesn't end with =

簡単に削除できる埋め込み文字を選択します。

もう 1 つの方法は、出力から = を削除し、base64 デコードを試みる前に、必ず = 記号を追加して 4 文字の倍数にすることです...

于 2012-05-20T12:26:31.733 に答える
1

等号を単に rtrim() で取り除くことができます。これは、ほとんどの人が行うことです。

しかし、あなたの質問については、文字列の長さ/ 3が整数の場合です。そう:

$pad = strlen($str) % 3; if($pad) { $str .= str_repeat(' ', $pad); }

しかし、ええ、パーサーは、文字列を戻すときに、そのように等号を自動的に 4 の倍数に追加します。したがって、それらを保持する必要はありません。

于 2012-05-20T12:31:49.613 に答える