我试图了解 TripleDES 加密的简单代码,以了解它是如何工作的。我在谷歌上看到了很多代码。其中一些使用TripleDES类,其中一些使用TripleDESCryptoServiceProvider类。据我所知,第二个继承自第一个。
TripleDES 类:(仅显示加密部分)
static void Main(string[] args)
{
TripleDES TripleDESalg = TripleDES.Create("TripleDES");
string sData = "Here is some data to encrypt.";
byte[] Data = EncryptTextToMemory(sData, TripleDESalg.Key, TripleDESalg.IV);
string Final = DecryptTextFromMemory(Data, TripleDESalg.Key, TripleDESalg.IV);
Console.WriteLine(Final);
Console.ReadLine();
}
public static byte[] EncryptTextToMemory(string Data, byte[] Key, byte[] IV)
{
MemoryStream mStream = new MemoryStream();
TripleDES tripleDESalg = TripleDES.Create();
CryptoStream cStream = new CryptoStream(mStream, tripleDESalg.CreateEncryptor(Key, IV), CryptoStreamMode.Write);
byte[] toEncrypt = new ASCIIEncoding().GetBytes(Data);
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
byte[] ret = mStream.ToArray();
cStream.Close();
mStream.Close();
return ret;
}
以及 TripleDESCryptoServiceProvider 类:(仅加密代码)
static void Main(string[] args)
{
TripleDESCryptoServiceProvider tDESalg = new TripleDESCryptoServiceProvider();
string sData = "Here is some data to encrypt.";
byte[] Data = EncryptTextToMemory(sData, tDESalg.Key, tDESalg.IV);
string Final = DecryptTextFromMemory(Data, tDESalg.Key, tDESalg.IV);
Console.WriteLine(Final);
Console.ReadLine();
}
public static byte[] EncryptTextToMemory(string Data, byte [] key, byte[] iv)
{
MemoryStream mStream = new MemoryStream();
CryptoStream cStream = new CryptoStream(mStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(key, iv ),
CryptoStreamMode.Write);
byte[] toEncrypt = new ASCIIEncoding().GetBytes(Data);
cStream.Write(toEncrypt, 0, toEncrypt.Length);
cStream.FlushFinalBlock();
byte[] ret = mStream.ToArray();
cStream.Close();
mStream.Close();
return ret;
}
两个代码都可以正常工作,并且 99% 相同。但我的问题是,
这两个类有什么区别?
哪个班级更容易接受?
TransformFinalBlock() 和 FlushFinalBlock() 有什么区别?
有些代码不使用 MemoryStream 和 CryptoStream 类。他们工作得很好。那么使用这些流有什么好处呢?
最后,在上面的代码中,我如何知道使用了什么 keysize、cyphermode 和 padding 算法?
提前致谢。