をAESは、System.Security.CryptographyでAesクラスとして、フレームワークに組み込まれています。 2つの具体的な実装があります.1つは管理され、もう1つはWindows Crypto Service Providerを使用します(より高速ですが他のプラットフォームには移植できません)。 Rijndaelの実装もあり、そこからAESが導出されます。
ブロック暗号であるため、初期化ベクトルと暗号化/復号化の鍵が必要です。 1つを設定せずに暗号化すると、ランダムなものが使用されますが、復号化のためにそれを保存して取得する必要があります。
コード例:(私の近刊GRINの6章から持ち上げ)
static byte[] Encrypt(byte[] clearText, byte[] key, byte[] iv)
{
// Create an instance of our encyrption algorithm.
RijndaelManaged rijndael = new RijndaelManaged();
// Create an encryptor using our key and IV
ICryptoTransform transform = rijndael.CreateEncryptor(key, iv);
// Create the streams for input and output
MemoryStream outputStream = new MemoryStream();
CryptoStream inputStream = new CryptoStream(
outputStream,
transform,
CryptoStreamMode.Write);
// Feed our data into the crypto stream.
inputStream.Write(clearText, 0, clearText.Length);
// Flush the crypto stream.
inputStream.FlushFinalBlock();
// And finally return our encrypted data.
return outputStream.ToArray();
}
とAESクラスのいずれかと、適切なとRijndaelManagedクラスを置き換える
static byte[] Decyrpt(byte[] clearText, byte[] key, byte[] iv)
{
// Create an instance of our encryption algorithm.
RijndaelManaged rijndael = new RijndaelManaged();
// Create an decryptor using our key and IV
ICryptoTransform transform = rijndael.CreateDecryptor(key, iv);
// Create the streams for input and output
MemoryStream outputStream = new MemoryStream();
CryptoStream inputStream = new CryptoStream(
outputStream,
transform,
CryptoStreamMode.Write);
// Feed our data into the crypto stream.
inputStream.Write(clearText, 0, clearText.Length);
// Flush the crypto stream.
inputStream.FlushFinalBlock();
// And finally return our decrypted data.
return outputStream.ToArray();
}
を復号化しますキー。
私はこれをやろうとしていますが、キーサイズ違反が続いています。ここに私のキーです: string verySecureKey = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab"; 私が行うこと: var algo = new System.Security.Cryptography.RijndaelManaged(); keyArray = UTF8Encoding.UTF8.GetBytes(verySecureKey); algo.Key = keyArray; 最後の行(32ではなく64ビット)でキー違反が発生しますが、これはAS3Cryptoで正常に動作します。思考? – aronchick