繁体   English   中英

AES加密和C#

[英]AES Encryption and C#

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

特别是在.Net / C#中,我很困惑为什么有两个抽象基类System.Security.Cryptography.AesSystem.Security.Cryptography.AesCryptoServiceProviderSystem.Security.Cryptography.AesManaged

然后似乎AES和Rijndael之间有区别/重叠,.NET有RijndaelRijndaelManaged类,以及RijndaelManagedTransform

所有这些之间的区别是什么? 我注意到AES类似乎只存在于.NET 3.5之后,而Rijndael从1.0开始就存在

对不起,如果这些都是愚蠢的问题,除了安全的散列函数之外,我是加密的新手。

AES,高级加密标准,在FIPS PUB 197中定义了三种对称分组密码:AES-128,AES-192和AES-256。 所有三种算法都由Rijndael算法的特定参数选择定义。

AES-128加密是一种功能(密钥,数据) - >(加密)。 Rijndael加密是一种功能(密钥,数据,块大小,密钥大小) - >(加密)。

AesCryptoServiceProvider使用基础Windows CryptoAPI执行加密。 AesManaged在纯托管代码中执行加密。 RijndaelManaged支持全范围的参数选择(也在纯托管代码中)。

使用AesCryptoServiceProvider优点包括提高速度的可能性以及CryptoAPI已通过FIPS认证(在某些版本的Windows上)。

AesManaged优点包括可移植性(所有版本的Windows都不支持AesCryptoServiceProvider )。

RijndaelManaged的唯一优势是它在早期版本的.NET框架中得到支持 - 我从未见过有人使用非AES参数选择。

以下内容来自AesCryptoServiceProvider MSDN页面。

Windows 7,Windows Vista SP1或更高版本,Windows XP SP3,Windows Server 2008(不支持服务器核心角色),Windows Server 2008 R2(不支持服务器核心角色),Windows Server 2003 SP2

.NET Framework不支持每个平台的所有版本。 有关受支持版本的列表,请参阅.NET Framework系统要求。

但事情是,我并没有真正理解为什么不支持它的原因。 .NET 3.5现在通常安装在Windows XP上,但在XP SP3之前可能会有一些与CLR有些不同的东西,并且可能会阻止它正常工作。 在MSDN页面上确实没有足够的信息来推测甚至; 虽然。

至于你的问题,类之间的差异(再次来自MSDN)如下:

AesManaged

提供高级加密标准(AES)对称算法的托管实现。

AES算法本质上是Rijndael对称算法,具有固定的块大小和迭代计数。 此类的功能与RijndaelManaged类相同,但将块限制为128位,并且不允许反馈模式。

AesCryptoServiceProvider

使用高级加密标准(AES)算法的加密应用程序编程接口(CAPI)实现执行对称加密和解密。

AES

表示高级加密标准(AES)的所有实现必须从中继承的抽象基类。

我一直坚持使用* CryptoServiceProvider实现,因为它们总是向我提供我想要的东西。 我建议的唯一的事情是,如果你想看看不同的类是否执行不同的是编写一些测试用例和单元测试,并实际看到它在行动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM