2015-04-24 94 views
1

因爲我是加密概念的新手。我應該做的應用程序發送的數據,通過AES對稱技術加密。另外我需要發送我使用不對稱RSA技術以加密格式加密的密鑰,另一方面。我已經使用AES對稱加密技術使用256位密鑰完成了加密,現在我已經以字節加密了數據,密鑰和啓動向量(IV)。雖然我試圖解密,但我也知道啓動向量也需要獲取確切的數據。如何在AES加密中使用會話密鑰傳輸初始向量

現在的問題是

1.how不要我送與初始向量IV另一隻手的關鍵?

2.是否需要加密數據或字節鍵。使用密鑰發送初始向量的標準方式是什麼?

3.i需要用非對稱加密方法用公鑰加密密鑰。

public byte[] SymmetricAESEncryption(string plainText, byte[] key, byte[] initVector) 
    { 
     byte[] encrypted; 
     using (Aes objAES = Aes.Create()) 
     { 
      objAES.KeySize = 256; 

      ICryptoTransform encryptor = objAES.CreateEncryptor(key, initVector); 

      using (MemoryStream msEncrypt = new MemoryStream()) 
      { 
       using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) 
       { 
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) 
        { 
         swEncrypt.Write(plainText); 
        } 
        encrypted = msEncrypt.ToArray(); 
       } 
      } 
     } 
     return encrypted; 
    } 

AES解密代碼在C#中:它們如何解密後的私鑰

我的AES加密代碼,在C#中讀取另一方面密鑰和IV

static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV) 
    { 
     string plaintext = null; 
     using (Aes rijAlg = Aes.Create()) 
     { 
      rijAlg.Key = Key; 
      rijAlg.IV = IV; 
      ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV); 

      using (MemoryStream msDecrypt = new MemoryStream(cipherText)) 
      { 
       using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) 
       { 
        using (StreamReader srDecrypt = new StreamReader(csDecrypt)) 
        { 
         plaintext = srDecrypt.ReadToEnd(); 
        } 
       } 
      } 

     } 
     return plaintext; 

    } 

我C中的不對稱代碼#

X509Certificate2 objCertificate = new X509Certificate2(); 
     objCertificate.Import(Encoding.UTF8.GetBytes(rawData.ToString().Trim())); 

     RSACryptoServiceProvider objAsyAlgm1 = (RSACryptoServiceProvider)objCertificate.PublicKey.Key; 

     byte[] SessionKeyEncryptValue = objAsyAlgm1.Encrypt(sessionKey, false); 

回答

1

IV不需要保持安全。通常將IV附加在密文上並將它們一起發送。接收端使用傳入消息的前128位作爲IV,並將其餘部分作爲密文。

當然,密鑰需要在RSA(或等效)加密下單獨發送。

+1

感謝您的回覆。你可以給我任何示例代碼來做到這一點? (加密和解密) –