2013-01-22 47 views
0

這裏是我的代碼,先用字符串:Rijndael如何從字符串和字節[]返回不同的結果?

byte[] concatBytes = Encoding.ASCII.GetBytes(key); 
byte[] keyBytes = Encoding.ASCII.GetBytes(key); 
for (int i = 0; i < 3; i++) 
{ 
     concatBytes = Encrypt(Encoding.ASCII.GetString(concatBytes), keyBytes); 
     //Console.WriteLine(Transform.Hexa(concatBytes)); 
} 

public byte[] Encrypt(string plainText, byte[] key) 
    { 
     byte[] encrypted; 
     using (var rijndael = new RijndaelManaged()) 
     { 
      rijndael.Mode = CipherMode.ECB; 
      rijndael.KeySize = 128; 
      rijndael.BlockSize = 128; 
      rijndael.Padding = PaddingMode.Zeros; 
      rijndael.Key = key; 
      //rijndael.IV = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 

      ICryptoTransform transform = rijndael.CreateEncryptor(rijndael.Key, rijndael.IV); 

      using (var memoryStream = new MemoryStream()) 
      { 
       using (var cryptoStream = new CryptoStream(memoryStream, transform, CryptoStreamMode.Write)) 
       { 
        using (var streamWriter = new StreamWriter(cryptoStream)) 
        { 
         streamWriter.Write(plainText); 
        } 
        encrypted = memoryStream.ToArray(); 
       } 
      } 
     } 
     return encrypted; 
    } 

如果我我的方法參數plainText改變byte[]比我的結果是完全不同的。我在這裏錯過了什麼?另外,我們使用OpenSSLRijndael AES加密方法得到不同的結果。任何建議如何我可以解決這個問題?

+0

也許字符串編碼是不同的? –

回答

1

StreamWriter(Stream)

通過使用UTF-8編碼和默認緩衝區大小初始化StreamWriter類指定的流的新實例。

由於您使用的是不同的編碼(UTF-8而不是ASCII),因此獲得不同的結果並不奇怪。

+0

我根據你的評論重寫了我的代碼,但沒有任何改變。 – Roosevelt

+0

這裏是我得到: UTF-8 1. e63568071c476aac79ff3fb8c1b5bce3 2. 6ee2abc6ac0c25f234a02e137210c0c4e64068a86f58c881897eba2647933205 3. 7a2728cb0a70ec713b0d458a07acc2c6d5bfb626a56ad9bc946ab3332e9de5c6594eb3379375c2cf 字節: 1. 595f71c741fe1a0f46cd06fdae38d2ca 2. 595f71c741fe1a0f46cd06fdae38d2ca 3. 595f71c741fe1a0f46cd06fdae38d2ca – Roosevelt

相關問題