我使用以下代码使用3-DES算法加密带有密钥的字符串:
private bool Encode(string input, out string output, byte[] k, bool isDOS7)
{
try
{
if (k.Length != 16)
{
throw new Exception("Wrong key size exception");
}
int length = input.Length % 8;
if (length != 0)
{
length = 8 - length;
for (int i = 0; i < length; i++)
{
input += " ";
}
}
TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.Zeros;
des.Key = k;
ICryptoTransform ic = des.CreateEncryptor();
byte[] bytePlainText = Encoding.Default.GetBytes(input);
MemoryStream ms = new MemoryStream();
CryptoStream cStream = new CryptoStream(ms,
ic,
CryptoStreamMode.Write);
cStream.Write(bytePlainText, 0, bytePlainText.Length);
cStream.FlushFinalBlock();
byte[] cipherTextBytes = ms.ToArray();
cStream.Close();
ms.Close();
output = Encoding.Default.GetString(cipherTextBytes);
}
catch (ArgumentException e)
{
output = e.Message;
//Log.Instance.WriteToEvent("Problem encoding, terminalID= "+objTerminalSecurity.TerminalID+" ,Error" + output, "Security", EventLogEntryType.Error);
return false;
}
return true;
}
我将输出参数原样发送到WCF http绑定webservice,我注意到实际编码的字符串看起来不同,看起来有一些\ t和\ n但是charachters大致相同。 / p>
发生了什么,为什么服务器会获得不同的编码字符串?
答案 0 :(得分:3)
通常,密码文本是base64编码的,以便在传输过程中保持二进制安全。
此外,我不会将3DES与ECB一起使用。这太糟糕了,你必须从某个地方复制粘贴这个。在cbc模式下使用AES并考虑添加cmac或hmac。