Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between Aes and AesManaged

Tags:

c#

encryption

aes

I found two class in C# related to AES, and example code of them MSDN provides are similar, what is the difference between these two classes?

Aes Class

https://msdn.microsoft.com/en-us/library/system.security.cryptography.aes(v=vs.110).aspx

AesManaged Class

https://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged(v=vs.110).aspx

like image 846
yu yang Jian Avatar asked Aug 03 '17 02:08

yu yang Jian


People also ask

What is AesManaged?

AesManaged class is a managed implementation of AES algorithm. This article demonstrates how to use AesManaged class to apply AES algorithm to encrypt and decrypt data in . NET and C#. . NET provides high level classes for various encryption algorithms, both symmetric and asymmetric.

Is rijndael obsolete?

The Rijndael and RijndaelManaged types are marked as obsolete, starting in . NET 6.

Is AesManaged FIPS compliant?

NET CSPs, e.g. AesManaged or MD5CryptoServiceProvider, that do not rely on this libraries are not compliant. The security policy FIPS mode simply turns on a flag in the registry (HKLM\SYSTEM\CurrentControlSet\Control\Lsa\fipsalgorithmpolicy), nothing more. It is the responsibility of CSPs to check this flag.

What is using system security cryptography?

Security. Cryptography Namespace. Provides cryptographic services, including secure encoding and decoding of data, as well as many other operations, such as hashing, random number generation, and message authentication.


1 Answers

System.Security.Cryptography.Aes is an abstract class, representing merely the concept of AES-ness. AesManaged, AesCryptoServiceProvider, and AesCng are concrete implementations of AES in managed code, using Windows CAPI, and using Windows CNG (respectively). (On .NET Core that's a lie: AesManaged and AesCryptoServiceProvider both just use a automagic hidden class which uses Windows CNG, macOS Security.framework, or OpenSSL, as available)

If you're unclear on which one you want, you want to create an instance via Aes.Create() and only use the base type. The only real exception is when using AesCng with a named key (which is very rare).

like image 113
bartonjs Avatar answered Oct 13 '22 00:10

bartonjs