2014-04-27 5 views
0

J'essaie de créer un code crypté/décrypté pour 3DES en utilisant C# construit en 3Des. Je configure comme ceci:C# Triple-Des longueur incorrecte

this.tDes = new TripleDESCryptoServiceProvider(); 
    this.tDes.Key = new byte[]{97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112}; 
    this.tDes.IV = new byte[8]; 
    this.tDes.Mode = CipherMode.CBC; 

Et ceci est ma fonction decript:

public string Decrypt(string CipherText) 
    { 
     byte[] cipherData = System.Text.Encoding.UTF8.GetBytes(CipherText); 
     MemoryStream ms = new MemoryStream(); 
     CryptoStream cs = new CryptoStream(ms, this.tDes.CreateDecryptor(), CryptoStreamMode.Write); 
     cs.Write(cipherData, 0, cipherData.Length); 
     cs.FlushFinalBlock(); 
     byte[] ClearBytes = ms.ToArray(); 
     ms.Close(); 
     cs.Close(); 
     string decriptedData = Convert.ToBase64String(ClearBytes); 
     return decriptedData; 
    } 

Ceci est ma fonction Encrypt:

public string Encrypt(string InputText) 
{ 
    byte[] clearData = System.Text.Encoding.UTF8.GetBytes(InputText); 
    MemoryStream ms = new MemoryStream(); 
    CryptoStream cs = new CryptoStream(ms, this.tDes.CreateEncryptor(), CryptoStreamMode.Write); 
    cs.Write(clearData, 0, clearData.Length); 
    cs.FlushFinalBlock(); 
    byte[] CipherBytes = ms.ToArray(); 
    ms.Close(); 
    cs.Close(); 
string EncryptedData = Convert.ToBase64String(CipherBytes); 
    return EncryptedData; 
} 

Mais en essayant de le déchiffrer, C# renvoie une erreur dans la ligne "cs.FlushFinalBlock();" dire une longueur incorrecte. Quelle devrait être la taille correcte? Quel est le problème?

+1

Tenez-vous, votre fonction est appelée 'decrypt' mais il semble que les données soient cryptées. Qu'est-ce que 'decrypt' est censé faire? –

+1

Aussi, vous devriez regarder dans les [conventions de capitalisation .NET] (http://msdn.microsoft.com/en-us/library/ms229043%28v=vs.110%29.aspx), votre fonction devrait être 'PascalCasing 'et vos variables locales doivent toutes être' camaelCasing'. –

+0

Tenez-vous, à partir de votre modification, il semble que vous utilisiez 'UTF8.GetBytes' pour son entrée, mais dans votre ancienne version de" crypter "vous aviez' ToBase64' pour sa sortie. S'il vous plaît poster à la fois votre crypter et votre fonction de décryptage. L'erreur que vous obtenez est presque toujours parce que votre fonction de déchiffrement ne correspond pas à votre fonction de chiffrement, nous avons donc besoin de voir les deux en même temps pour comparer les deux. De même, si vous n'aviez pas reçu d'exception, votre fonction afficherait simplement le texte 'System.Byte []'. –

Répondre

0

Vous devez décoder la base 64 avant de la décrypter (donc attribuez-la à cipherData). Puis clearBytes devrait être décodé en utilisant UTF8 et attribué à decriptedData.

+0

Ou 'decryptedData' après correction, bien sûr :) –

+0

Oui! C'était ça! Merci! – Javi

Questions connexes