2011-10-13 26 views
0

我有測試輸入字符串(鍵=值&鍵=值...)和密鑰(像這樣D2335A9CA4924D9F914D2B47B450D436) 我需要加密我的字符串使用AES加密,但我的結果不等於提供商的結果。結果例子: AD0C66FB3C1204A8B0AC68AA9B9E3029C86DFF5872753F2F8D7B68EA667D8616215C20F831ABD5A4D56F286E471651AE5C15BCEB2F368200B4D9F3F6D2F0791E8F45D45FD .................... 我做錯了嗎? (googlized代碼)AES c#編碼。無法獲得有效結果

public static string Encrypt(string toEncrypt) 
     { 
      byte[] keyArray = ASCIIEncoding.ASCII.GetBytes("D2335A9CA4924D9F914D2B47B450D436"); 
      byte[] toEncryptArray = ASCIIEncoding.ASCII.GetBytes(toEncrypt); 
      RijndaelManaged rDel = new RijndaelManaged(); 
      rDel.Key = keyArray; 
      rDel.KeySize = 128; 
      rDel.BlockSize = 256; 
      rDel.IV = keyArray; 
      rDel.Mode = CipherMode.CFB; 
      rDel.Padding = PaddingMode.PKCS7; 
      ICryptoTransform cTransform = rDel.CreateEncryptor(); 
      byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); 
      return FormatByteArray(resultArray); 
     } 

     internal static string FormatByteArray(byte[] b) 
     { 
      System.Text.StringBuilder sb1 = new System.Text.StringBuilder(); 
      int i = 0; 
      for (i = 0; i < b.Length; i++) 
      { 
       if (i != 0 && i % 16 == 0) 
        sb1.Append("\n"); 
       sb1.Append(System.String.Format("{0:X2} ", b[i])); 
      } 
      return sb1.ToString(); 
     } 

回答

3

我做錯了嗎?

byte[] keyArray = ASCIIEncoding.ASCII.GetBytes("D2335A9CA4924D9F914D2B47B450D436"); 

這不可能是正確的。它會給你64個字節,其中一半爲0x00。

它看起來像是十六進制編碼,我想你需要一個循環來解碼它。
這會給你16個字節(128位)。


老答案:

你需要這個字符串解碼,它可能是Base64編碼。嘗試:

byte[] keyArray = System.Convert.FromBase64String("D2335A9CA4924D9F914D2B47B450D436") 

並檢查您是否有一個有效的(長度)鍵。

+1

也許十六進制,而不是base64?如果是這樣,請參閱http://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to-hexadecimal-string-and-vice-versa-in-c –

+1

@adrift,是的,我已經在編輯了。那個鏈接也有幫助。 –

+0

謝謝你們。我已經這樣做了,但結果無論如何都是不正確的。而且任何構建此代碼都會帶來新的結果。我猜一些參數是動態的。 – Ars