c# - AES 加密和 C#

标签 c# .net security cryptography

根据我的阅读,我不确定 AES 是一种单一的标准化算法,可以使用不同长度的 key ,还是一系列类似的算法?我的意思是,如果我发现任何 2 个 AES 实现采用 128 位 key ,我是否应该确信它们将以相同方式工作(除了错误)?

特别是在.Net/C#中,我很困惑为什么抽象基类System.Security.Cryptography.Aes有两个实现:System.Security.Cryptography.AesCryptoServiceProvider & System.Security.Cryptography.AesManaged

然后 AES 和 Rijndael 之间似乎有区别/重叠,.NET 有 RijndaelRijndaelManaged 类,以及 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/

相关文章:

javascript - 浏览器插件或扩展程序可以查看页面中运行的 JavaScript 变量的值吗

security - Multi-Tenancy Azure AD 非管理员登录

c# - 如何使用 asp.net C# 将命令提示符输出重定向到文件?

c# - NEST是否会在Elasticsearch或客户端中进行投影?

c# - WPF - 在 C# 中使用 Storyboard 的 EllipseGeometry 动画

.net - IIS 从特定过时的 URL 重定向?

c# - 如何将一个方法作为参数传递给另一个方法?

c# - 获取扩展方法中第一个参数的名称?

c# - 通用方法和转换 : how to define that Type 1 is convertible to Type 2

c - 绕过内存损坏限制