我有一个十六进制字符串有两个密钥进行加密。 我给这家代码看起来像这样:
public byte[] TripleDes(byte[] inputBuffer, byte[] key)
{
byte[] result;
using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
using (MemoryStream stream = new MemoryStream())
using (CryptoStream cryptoStream = new CryptoStream(stream, des.CreateEncryptor(), CryptoStreamMode.Write))
{
des.Key = key;
// des.KeySize = 128; <- wrong, overrides the values of the key
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.None;
cryptoStream.Write(inputBuffer, 0, inputBuffer.Length);
cryptoStream.FlushFinalBlock();
result = stream.ToArray();
}
return result;
}
被设置的关键是16个字节和由两个部分组成:第一部分=密钥来加密,第二部分=密钥来解密。 该INPUTBUFFER是8个字节。 当我做了加密这样的,我的成绩是16个字节而不是8个字节。 我究竟做错了什么?
检查stream.Length
。 使用该功能可以改变流字节数组
public static byte[] ReadFully(Stream input)
{
if (input is MemoryStream)
{
return ((MemoryStream)input).ToArray();
}
else
{
return ReadFully(input);
}
}
该代码是正确的,但为了不。 所述“CreateEncryptor()”方法instanziated后“TripleDESCryptoServiceProvider”实例的配置发生了。 所以,正确的代码是:
public byte[] TripleDes(byte[] inputBuffer, byte[] key)
{
using (TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider())
{
des.Key = key;
des.Mode = CipherMode.ECB;
des.Padding = PaddingMode.None;
byte[] result;
using (MemoryStream stream = new MemoryStream())
using (CryptoStream cryptoStream = new CryptoStream(stream, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cryptoStream.Write(inputBuffer, 0, inputBuffer.Length);
cryptoStream.Flush();
//cryptoStream.FlushFinalBlock();
result = stream.ToArray();
}
return result;
}
}
在“同花顺()”和“FlushFinalBlock()”方法的返回两个相同的结果,除了“FlushFinalBlock”有8个字节,我不需要,我不知道它是什么额外的数据。