私はまだ初心者なので、それは非常にばかげた問題であることを知っています。
ケース:
文字列A:暗号化アルゴリズムからの出力文字列(特殊文字を含む)
文字列B:文字列Aのハッシュ関数からの出力文字列(特殊文字を含む)
String C = A + "|" + B;
問題:
受信者でそれらを分離できるように、送信者から文字列Cとして一緒に送信したいのですが、
文字列AとBに区切り文字「|」が含まれている可能性があります
それで、あなたは私に何を提案しますか?[C#]
私はまだ初心者なので、それは非常にばかげた問題であることを知っています。
ケース:
文字列A:暗号化アルゴリズムからの出力文字列(特殊文字を含む)
文字列B:文字列Aのハッシュ関数からの出力文字列(特殊文字を含む)
String C = A + "|" + B;
問題:
受信者でそれらを分離できるように、送信者から文字列Cとして一緒に送信したいのですが、
文字列AとBに区切り文字「|」が含まれている可能性があります
それで、あなたは私に何を提案しますか?[C#]
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]));
最初の 3 文字で最初の文字列の長さをノード化できます。次に、レシーバーでの長さを使用して、文字列を分割します。
きれいではありませんが、機能します。
文字列 C のすべてのパイプをエスケープできます
例えば
これにより、A と B を結合するものを除いて、文字列にパイプがないことが保証されますが、反対側でそれらを分割し、既存のすべてのパイプを元の場所に復元することもできます。操作の順序を逆にするだけです。