2011-03-24 31 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