2009-04-22 15 views
1

C# 2005 Ich benutze eine einfache verschlüsseln und entschlüsseln für eine IP-Adresse. Die App auf dem Remote-Server verschlüsselt die IP-Adresse und der Client entschlüsselt sie. Wenn der Client jedoch die IP-Adresse entschlüsselt, bekomme ich nur einen Teil der IP-Adresse zurück. Der Rest ist Müll. Vorher: 123.456.78.98 Nachher: ​​fheh &^G.78.98C# Verschlüsselung und Entschlüsselung

Vielen Dank,

/// 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); 
     } 
     } 

Antwort

8

Zusammen mit einem Schlüssel benötigen Sie ein Initialization Vector (8 Bytes für Ihren Fall):

// 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

Haben Sie versucht, die Codierung explizit auf beiden Seiten einstellen? Vielleicht ist der Standard anders.

2

als Darin bereits gesagt, müssen Sie den Initialisierungsvektor setzen. Wählen Sie nach Möglichkeit für jedes Verschlüsselungsverfahren ein zufälliges aus und übertragen/speichern Sie es im Klartext.

Übrigens sollten Sie in CryptoStream schauen, anstatt mit TransformBlock/TransformFinalBlock zu arbeiten ... es ist viel sauberer, imho.

+0

Wie ist das? Könntest du erklären? (Nutzung des Streams) –

Verwandte Themen