2015-04-24 88 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

感谢您的回复。你可以给我任何示例代码来做到这一点? (加密和解密) –