1

私はまだ初心者なので、それは非常にばかげた問題であることを知っています。

ケース:
文字列A:暗号化アルゴリズムからの出力文字列(特殊文字を含む)
文字列B:文字列Aのハッシュ関数からの出力文字列(特殊文字を含む)

String C = A + "|" + B;

問題:
受信者でそれらを分離できるように、送信者から文字列Cとして一緒に送信したいのですが、
文字列AとBに区切り文字「|」が含まれている可能性があります

それで、あなたは私に何を提案しますか?[C#]

4

3 に答える 3

6

1 つのオプションは、Convert.ToBase64String 関数を使用して、暗号化ツールからの出力 (できれば生のバイトを返す) を Base64 のようなものに変換することです。と。ただし、Base64 は大量のスペースを浪費するため、スペース効率は失われますが、小さなデータを扱う場合は問題ありません。

暗号化コードがバイトを返す/返せない場合は、最初に適切なエンコーダーを使用してバイトに変換する必要があります。つまり、文字列が ASCII エンコーディングの場合は Encoding.ASCII.GetBytes() です。

//On the sender side
byte[] bytesA = Encoding.Default.GetBytes(A);
byte[] bytesB = Encoding.Default.GetBytes(B);
string encA = Convert.ToBase64String(bytesA);
string encB = Convert.ToBase64String(bytesB);

string C = encA + "|" + encB;

//On the receiver side
string[] parts = C.Split('|');
string A = Encoding.Default.GetString(Convert.FromBase64String(parts[0]));
string B = Encoding.Default.GetString(Convert.FromBase64String(parts[1]));
于 2012-02-16T19:54:51.070 に答える
3

最初の 3 文字で最初の文字列の長さをノード化できます。次に、レシーバーでの長さを使用して、文字列を分割します。

きれいではありませんが、機能します。

于 2012-02-16T19:56:19.927 に答える
1

文字列 C のすべてのパイプをエスケープできます

例えば

  • 「=」をエスケープ文字として定義します (通常は「\」を使用できますが、これは c# の文字列のエスケープ文字でもあるため、非常に面倒です)。
  • 文字列 A と B のすべての「=」を「=E」に置き換えます (等しい場合は E)。
  • すべての「|」を置き換えます 文字列 A および B で "=P" (パイプの場合は P)
  • それらをパイプでつなぎます

これにより、A と B を結合するものを除いて、文字列にパイプがないことが保証されますが、反対側でそれらを分割し、既存のすべてのパイプを元の場所に復元することもできます。操作の順序を逆にするだけです。

于 2012-02-16T19:55:23.813 に答える