2011-09-13 103 views
16

我需要實現AES 256加密/解密,我一直沒能找到一個正常工作的例子。C#AES256加密使用System.Security.Cryptography.Aes示例

MSDN建議我應該使用AES類。

Rijndael類是Aes算法的前身。您應該使用Aes算法而不是Rijndael。有關更多信息,請參閱.NET Security博客中的條目The Differences Between Rijndael and AES

任何人都可以指出我使用AES類AES256的好例子嗎?

要加一點更清晰:

我有一個包含共享密鑰和加密的文本字符串的加密文件。我需要解密文本然後驗證它。

我見過的所有例子都希望至少有2個參數來執行加密/解密。

我應該能夠推斷密碼文件中的初始化矢量和密鑰?

這是我的密碼文件中包含的文本的例子:

EUA±IRAƒ@†²; A;öDWnªóª©©¨|L

+4

兩者的[AesManaged]的文檔(http://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged .aspx)和[AesCryptoServiceProvider](http://msdn.microsoft.com/zh-cn/library/system.security.cryptography.aescryptoserviceprovider.aspx)類提供了詳細的示例。如果這些示例不能以您期望的方式工作,請發佈一個簡短但完整的程序來演示此問題。 – dtb

+0

@dtb謝謝。我沒有發現AesManaged中的例子,因爲這隻適用於.Net 4,而我目前使用3.5,但這個例子看起來很簡單。 – TeamWild

+0

要解碼數據,您需要知道最初使用哪種密碼流模式加密(通常是CBC或ECB)。 ECB沒有初始化向量。如果使用CBC,則加密數據的前幾個字節可以是IV。請提供您擁有的所有信息併發布完整的有效樣本(kez和加密數據)。由於加密數據是二進制的,因此您必須將其發佈爲Base 64編碼或以十六進制表示。 – Codo

回答

3

有一次,我發現我的客戶是如何在他們的最終處理加密/解密它的所有信息直接使用dtb建議的AesManaged example

將最終實現的代碼開始這樣的:

try 
    { 
     // Create a new instance of the AesManaged class. This generates a new key and initialization vector (IV). 
     AesManaged myAes = new AesManaged(); 

     // Override the cipher mode, key and IV 
     myAes.Mode = CipherMode.ECB; 
     myAes.IV = new byte[16] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // CRB mode uses an empty IV 
     myAes.Key = CipherKey; // Byte array representing the key 
     myAes.Padding = PaddingMode.None; 

     // Create a encryption object to perform the stream transform. 
     ICryptoTransform encryptor = myAes.CreateEncryptor(); 

     // TODO: perform the encryption/decryption as required... 

    } 
    catch (Exception ex) 
    { 
     // TODO: Log the error 
     throw ex; 
    } 
+0

我不會推薦使用ECB密碼模式。使用CBC或其他東西。如果你需要知道爲什麼,看看這篇維基百科文章: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation。另外,下面是如何在C#中使用AES進行加密的一個很好的例子: https://github.com/jbubriski/Encryptamajig –

+0

您的IV應該也是隨機的,每次你加密不同的數據。您還在評論中引用了CRB模式... –

+1

@JohnBubriski - 提供加密文件的第三方堅持使用密碼模式和IV。我明白這不是你應該怎麼做的,但是這是一個「Fit in或F ** k off」的例子。 – TeamWild

8

也許這個例子上市here可以幫助你。從作者聲明

的代碼約24行加密,23來解密