AES计数器模式C#等效

hot*_*ips 2 javascript c# aes

我使用以下javascript来加密一些数据:http://www.movable-type.co.uk/scripts/aes.html

我必须用C#解密它.有人知道如何用Rijndael经理解密吗?

我想避免移植代码;-)

提前致谢

Che*_*eso 10

唉, CTR模式未在System.Security.Cryptography命名空间中的内置AES类实现为"模式".

但是,有一个解决方案.使用在ECB模式下运行的内置AES类,全零的IV,无填充和一些调整,CTR模式并不太难实现.基本上,对于每个块,CTR模式对计数器进行加密,然后使用明文对该加密的结果进行异或,以获得密文.这是加密.你可以进行解密.由于转换操作是异或,它是自反的,因此解密与加密真的相同.

对于第一个16字节的块(AES的块大小),从零开始计数器; 递增每个后续块的计数器.

老实说,关于整个事件最棘手的部分是将要加密的数据分割成16个字节的块.如果应用程序要求加密10个字节,则无法加密.在进行转换之前,您需要等待直到获得完整的16个字节.所以你需要管理一个缓冲区.

我没有适合您的工作代码演示,但鉴于此描述,构建适合您的CTR模式应该不会太难.您可以在WinZipAes.cs模块中看到基于内置AES类的CTR模式加密示例,该模块是开源DotNetZip库的一部分.此代码确实有效,但尚未准备好在DotNetZip之外使用.您需要重新包装它以使其清洁.


另一方面,如果您只是想让Javascript和C#与AES互操作,并且您并不特别坚持CTR模式,那么您可以非常轻松地使用ECB模式. 这个问题向您展示了如何让SlowAES和.NET的Aes类一起工作,它包含指向工作代码(Javascript,C#和VB)的链接.但要注意ECB模式.

这是一个与您选择的Javascript库不同的Javascript库; 我更喜欢slowAES,因为它对我来说更有意义.另外,在那个答案中,我提供了支持类,如RFC2898基于密码的密钥派生.

祝好运.