簡體   English   中英

AES計數器模式C#等效

[英]AES Counter mode C# equivalent

我使用以下javascript來加密一些數據: http//www.movable-type.co.uk/scripts/aes.html

我必須用C#解密它。 有人知道如何用Rijndael經理解密嗎?

我想避免移植代碼;-)

提前致謝

唉, 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基於密碼的密鑰派生。

祝好運。

我沒有足夠的積分回答Cheeso的答案,但我不相信這是准確的,“如果應用程序要求加密10個字節,則無法加密。”

由於CTR模式對nonce進行加密,然后使用clearText對結果進行異或,因此可以加密任意大小的塊。 這實際上是CTR模式的主要優點之一,以及並行加密。

您可能還希望確保您對AES ECB塊的輸入是隨機IV和字節偏移的組合。 例如,高92位是隨機IV(每個文件不同),低32位是您的字節偏移。

對每個文件加密使用IV為0是危險的。 (請參閱“編寫安全代碼”,第285頁,第2版)。 改變每個加密操作的密鑰和IV。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM