私は TripleDES 暗号化の簡単なコードを理解し、それがどのように機能するかを理解しようとしています。そして、Googleで多くのコードを見てきました。一部はTripleDESクラスを使用し、一部は TripleDESCryptoServiceProvider クラスを使用しました。私が知っているのは、2番目のものは最初のものから継承されているということです。
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% 同じです。しかし、私の質問は、
これら2つのクラスの違いは何ですか?
どのクラスがより受け入れられますか?
TransformFinalBlock() と FlushFinalBlock() の違いは何ですか?
MemoryStream および CryptoStream クラスを使用しないコードがあります。そして、彼らはうまく機能します。では、これらのストリームを使用する利点は何でしょうか?
最後に、上記のコードで、どのキーサイズ、暗号モード、およびパディング アルゴリズムが使用されているかをどのように知ることができますか?
前もって感謝します。