SymmetricAlgorithm クラス
対称アルゴリズムのすべての実装が継承する必要がある、抽象基本クラスを表します。
この型のすべてのメンバの一覧については、SymmetricAlgorithm メンバ を参照してください。
System.Object
System.Security.Cryptography.SymmetricAlgorithm
System.Security.Cryptography.DES
System.Security.Cryptography.RC2
System.Security.Cryptography.Rijndael
System.Security.Cryptography.TripleDES
MustInherit Public Class SymmetricAlgorithm
Implements IDisposable
[C#]
public abstract class SymmetricAlgorithm : IDisposable
[C++]
public __gc __abstract class SymmetricAlgorithm : public
IDisposable
[JScript]
public abstract class SymmetricAlgorithm implements IDisposable
スレッドセーフ
この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。
解説
対称暗号アルゴリズムには、暗号化と復号化の両方に使用される、単一の共有キーがあります。対称アルゴリズムが有効に機能するためには、送信者と受信者以外に共有キーを知られないようにする必要があります。
RijndaelManaged 、 DESCryptoServiceProvider 、 RC2CryptoServiceProvider 、および TripleDESCryptoServiceProvider は、対称アルゴリズムの実装です。
使用例
[Visual Basic, C#, C++] 指定した Key と初期化ベクタ (IV) で TripleDESCryptoServiceProvider を使用して、 inName
で指定したファイルを暗号化し、暗号化の結果を outName
で指定したファイルに出力するメソッドの例を次に示します。このメソッドに対する desKey
パラメータおよび desIV
パラメータは、8 バイト配列です。このサンプルを実行するには、高度暗号化パックがインストールされている必要があります。
Private Shared Sub EncryptData(inName As String, outName As String, _
rijnKey() As Byte, rijnIV() As Byte)
'Create the file streams to handle the input and output files.
Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read)
Dim fout As New FileStream(outName, FileMode.OpenOrCreate, _
FileAccess.Write)
fout.SetLength(0)
'Create variables to help with read and write.
Dim bin(100) As Byte 'This is intermediate storage for the encryption.
Dim rdlen As Long = 0 'This is the total number of bytes written.
Dim totlen As Long = fin.Length 'Total length of the input file.
Dim len As Integer 'This is the number of bytes to be written at a time.
'Creates the default implementation, which is RijndaelManaged.
Dim rijn As SymmetricAlgorithm = SymmetricAlgorithm.Create()
Dim encStream As New CryptoStream(fout, _
rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write)
Console.WriteLine("Encrypting...")
'Read from the input file, then encrypt and write to the output file.
While rdlen < totlen
len = fin.Read(bin, 0, 100)
encStream.Write(bin, 0, len)
rdlen = Convert.ToInt32(rdlen + len)
Console.WriteLine("{0} bytes processed", rdlen)
End While
encStream.Close()
fout.Close()
fin.Close()
End Sub
[C#]
private static void EncryptData(String inName, String outName, byte[] rijnKey, byte[] rijnIV)
{
//Create the file streams to handle the input and output files.
FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
fout.SetLength(0);
//Create variables to help with read and write.
byte[] bin = new byte[100]; //This is intermediate storage for the encryption.
long rdlen = 0; //This is the total number of bytes written.
long totlen = fin.Length; //This is the total length of the input file.
int len; //This is the number of bytes to be written at a time.
SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); //Creates the default implementation, which is RijndaelManaged.
CryptoStream encStream = new CryptoStream(fout, rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write);
Console.WriteLine("Encrypting...");
//Read from the input file, then encrypt and write to the output file.
while(rdlen < totlen)
{
len = fin.Read(bin, 0, 100);
encStream.Write(bin, 0, len);
rdlen = rdlen + len;
Console.WriteLine("{0} bytes processed", rdlen);
}
encStream.Close();
fout.Close();
fin.Close();
}
[C++]
void EncryptData(String* inName, String* outName, Byte rijnKey[], Byte rijnIV[])
{
//Create the file streams to handle the input and output files.
FileStream* fin = new FileStream(inName, FileMode::Open, FileAccess::Read);
FileStream* fout = new FileStream(outName, FileMode::OpenOrCreate, FileAccess::Write);
fout->SetLength(0);
//Create variables to help with read and write.
Byte bin[] = new Byte[100]; //This is intermediate storage for the encryption.
long rdlen = 0; //This is the total number of bytes written.
long totlen = (long)fin->Length;//This is the total length of the input file.
int len; //This is the number of bytes to be written at a time.
SymmetricAlgorithm* rijn = SymmetricAlgorithm::Create(); //Creates the default implementation, which is RijndaelManaged.
CryptoStream* encStream = new CryptoStream(fout, rijn->CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode::Write);
Console::WriteLine(S"Encrypting...");
//Read from the input file, then encrypt and write to the output file.
while(rdlen < totlen)
{
len = fin->Read(bin, 0, 100);
encStream->Write(bin, 0, len);
rdlen = rdlen + len;
Console::WriteLine(S"{0} bytes processed", __box(rdlen));
}
encStream->Close();
fout->Close();
fin->Close();
}
[Visual Basic, C#, C++] 復号化も同じ方法で処理できます。ただし、その場合は CreateEncryptor の代わりに CreateDecryptor を使用します。復号化では、ファイルを暗号化するために使用したものと同じ Key と IV を使用する必要があります。
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
名前空間: System.Security.Cryptography
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
アセンブリ: Mscorlib (Mscorlib.dll 内)
参照
SymmetricAlgorithm メンバ | System.Security.Cryptography 名前空間 | 暗号サービス