根据我的阅读,我不确定 AES 是一种单一的标准化算法,可以使用不同长度的 key ,还是一系列类似的算法?我的意思是,如果我发现任何 2 个 AES 实现采用 128 位 key ,我是否应该确信它们将以相同方式工作(除了错误)?
特别是在.Net/C#中,我很困惑为什么抽象基类System.Security.Cryptography.Aes
有两个实现:System.Security.Cryptography.AesCryptoServiceProvider
& System.Security.Cryptography.AesManaged
。
然后 AES 和 Rijndael 之间似乎有区别/重叠,.NET 有 Rijndael
和 RijndaelManaged
类,以及 RijndaelManagedTransform
>/p>
所有这些之间有什么区别?我注意到 AES 类似乎只存在于 .NET 3.5 之后,而 Rijndael 从 1.0 开始就存在
抱歉,如果这些是愚蠢的问题,除了安全哈希函数之外,我是加密的新手。
最佳答案
AES,高级加密标准,在 FIPS PUB 197 中定义三个对称分组密码:AES-128、AES-192 和 AES-256。这三种算法都是由 Rijndael 算法的特定参数选择定义的。
AES-128-encryption 是一个函数 (key, data) -> (encryption)。 Rijndael-encryption 是一个函数 (key, data, block-size, key-size) -> (encryption).
AesCryptoServiceProvider
使用底层 Windows CryptoAPI 来执行加密。
AesManaged
在纯托管代码中执行加密。 RijndaelManaged
支持所有参数选择(也在纯托管代码中)。
使用 AesCryptoServiceProvider
的优势包括提高速度的潜力以及 CryptoAPI 通过 FIPS 认证(在某些版本的 Windows 上)这一事实。
AesManaged
的优点包括可移植性(并非所有版本的 Windows 都支持 AesCryptoServiceProvider
)。
RijndaelManaged
的唯一优点是它在 .NET 框架的早期版本中受支持 - 我从未见过有人使用非 AES 参数选择。
关于c# - AES 加密和 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683277/