我在安全网站上问了这个问题,那里的人建议我应该把它贴在这里。
一些背景。我们有在专有操作系统上运行 c 的专有设备和在 Windows 操作系统上运行 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();