セキュリティ サイトでこの質問をしたところ、ここに投稿するべきだったと言われました。
いくつかの背景。独自の OS で c を実行する独自のデバイスと、Windows OS で ac# dll を実行するその他のデバイスがあります。どちらもTCP接続を介してサーバーに接続します。サーバーの場合、両方のタイプのリクエストは同じです。TCP サーバーは、http バインディングを通じて、要求の一部をセルフホステッド WCF サービスに転送します。リンクに示されているように、リクエストは暗号化されます(C#dllが暗号化するように)。
TCP サーバーを切り離して、WCF サービスに直接リクエストを送信しようとしています。
私の問題は、WCF サービスが要求文字列を間違って受信したようで、復号化できないことです。
サーバー側の受信文字列に \t \n が追加されているようです。それ以外は同じように見えます。
これは、サーバー側の復号化コードです。
byte[] byteChiperText = Encoding.Default.GetBytes(input);
if (k.Length != 16)
{
throw new Exception("Wrong key size exception");
}
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Zeros;
des.Key = k;
ICryptoTransform ic = des.CreateDecryptor();
MemoryStream ms = new MemoryStream(byteChiperText);
CryptoStream cStream = new CryptoStream(ms,
ic,
CryptoStreamMode.Read);
StreamReader sReader = new StreamReader(cStream);
byte[] data = new byte[byteChiperText.Length];
int len = sReader.BaseStream.Read(data, 0, data.Length);
output = Encoding.Default.GetString(data, 0, len);
cStream.Close();