2009-04-22 5 views
1

C# 2005 J'utilise un cryptage et un chiffrement simples pour une adresse IP. L'application sur le serveur distant cryptera l'adresse IP et le client la décryptera. Cependant, lorsque le client décrypte l'adresse IP, je récupère seulement une partie de l'adresse IP. Le reste est des ordures. Avant: 123.456.78.98 Après: fheh &^G.78.98Chiffrement et décryptage C#

Un grand merci,

/// Encrypt the SIP IP address in the remote server 
     private void encryptSIP_IP(string sip_ip) 
     { 
      TripleDESCryptoServiceProvider encrypt = new TripleDESCryptoServiceProvider(); 

     /// Private key 
     byte[] key = { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0}; 

     encrypt.Key = key; 
     byte[] byteSIP = System.Text.Encoding.Default.GetBytes(sip_ip); 

      ICryptoTransform encryptor = encrypt.CreateEncryptor(); 
      byte[] encrypted_sip = encryptor.TransformFinalBlock(byteSIP, 0, byteSIP.Length); 



/// This will decrypt in the client application 
     private void decryptSIP_IP(byte[] encrypted_sip) 
     { 
      TripleDESCryptoServiceProvider decrypt = new TripleDESCryptoServiceProvider(); 
      /// Private key 
      byte[] key = { 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 144, 89, 55, 34, 21, 13, 8, 5, 3, 2, 1, 0 }; 
      decrypt.Key = key; 
      ICryptoTransform decryptor = decrypt.CreateDecryptor(); 

      byte[] original = decryptor.TransformFinalBlock(encrypted_sip, 0, encrypted_sip.Length); 
      string ip = System.Text.Encoding.Default.GetString(original); 
     } 
     } 

Répondre

8

Avec une clé que vous avez besoin d'un Initialization Vector (8 octets pour votre cas):

// To Encrypt 
encrypt.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; 

// Use same IV to decrypt 
decrypt.IV = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; 
1

Avez-vous essayé de placer le codage explicitement des deux côtés? Peut-être que la valeur par défaut est différente.

2

Comme Darin déjà dit, vous devez définir le vecteur d'initialisation. Si possible, choisissez-en un aléatoire pour chaque processus de chiffrement et transférez-le/enregistrez-le en texte clair. En passant, vous devriez regarder dans CryptoStream au lieu de travailler avec TransformBlock/TransformFinalBlock ... c'est beaucoup plus propre, à mon humble avis.

+0

Comment est-ce? Pourriez-vous expliquer? (utilisation du flux) –

Questions connexes