2011-03-24 60 views
1

我用下面的javascript加密一些数据:http://www.movable-type.co.uk/scripts/aes.htmlAES计数器模式C#相当于

我有一个C#进行解密。任何人都知道如何用Rijndael经理解密?

我想避免将代码移植提前

+0

HTTP:。。/ /social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/df38debe-3c4a-4792-8ddb-24d12e827e75/ – 2011-03-24 00:45:30

+0

也看到这个问题:http://stackoverflow.com/questions/1149611/getting-slowaes - 和 - rijndaelmanaged-class-in-net-to-play-together在一起,它展示了如何让SlowAES(一个JavaScript AES库)与.NET/C#一起工作。它可以工作。(但不是在CTR模式下) – Cheeso 2011-03-25 00:21:57

+1

我终于改写了在C#中的算法;) – hotips 2012-02-18 13:05:59

回答

8

唉, 在System.Security.Cryptography命名空间CTR mode is not implemented as a "mode" in the builtin AES class ;-)

感谢。

但是,有一个解决方案。 CTR模式并不太难以ECB模式操作内置的AES类,IV全部为零,没有填充和一些调整。基本上,对于每个块,CTR模式加密计数器,然后用明文XOR加密的结果以获得密文。这是加密。你会做解密的交谈。由于变换操作是XOR,因此它是反射式的,所以解密与加密真的是一样的。

从第一个16字节块(AES的块大小)开始计数器为零;为每个后续块增加计数器。

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

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


在另一方面,如果你只是想获取JavaScript和C#与AES进行互操作,而你是不是特别执着于CTR模式,那么你可以使用ECB模式,很容易。 This question向您展示了如何让SlowAES和.NET的Aes类一起工作,它包括工作代码(Javascript,C#和VB)的链接。 But be careful about ECB mode

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

祝你好运。

-2

您可能还希望确保您对AES ECB块的输入是随机IV和字节偏移量的组合。例如,高92位是随机IV(每个文件不同),低32位是您的字节偏移量。

对每个文件加密使用IV为0是危险的。 (请查阅“编写安全代码”,第285页,第2版)。改变每个加密操作的密钥和IV。

1

我没有足够的要点回复Cheeso的回答,但我不相信这是准确的,“如果应用程序要求加密10个字节,则无法加密。“

由于CTR模式加密的随机数,然后XOR运算明文的结果,您可以加密任意大小的块,这实际上是CTR模式的主要优点之一,具有并行加密沿着

+0

这是正确的。 – 2016-05-03 05:05:26