2014-04-27 8 views
0

Я пытаюсь сделать шифрованный/дешифрованный код для 3DES с использованием C#, встроенного в 3Des. Я настроив его так:C# Triple-Des неправильная длина

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; 

И это моя 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; 
    } 

Это моя шифровать функция:

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

Но при попытке расшифровать его, C# выдает ошибку в строке «cs.FlushFinalBlock();» говоря неправильную длину. Какой должен быть правильный размер? В чем проблема?

+1

Удерживайте, ваша функция называется 'decrypt', но, похоже, она шифрует данные. Что означает 'decrypt'? –

+1

Также вы должны ознакомиться с [Контрактными стандартами .NET] (http://msdn.microsoft.com/en-us/library/ms229043%28v=vs.110%29.aspx), ваша функция должна быть 'PascalCasing 'и ваши локальные переменные должны быть« camaelCasing ». –

+0

Удерживайте свое редактирование теперь, похоже, что вы используете 'UTF8.GetBytes' для ввода, но в вашей старой« шифрованной »версии у вас есть' ToBase64' для вывода. Пожалуйста, разместите как свой шифр, так и функцию расшифровки. Ошибка, которую вы получаете, почти всегда потому, что ваша функция дешифрования не соответствует вашей функции шифрования, поэтому нам нужно увидеть оба одновременно, чтобы сравнить их. Кроме того, если вы не получали исключение, ваша функция просто вывела бы текст 'System.Byte []'. –

ответ

0

Вам необходимо декодировать базу 64 перед ее расшифровкой (поэтому назначьте ее cipherData). Затем clearBytes должен быть декодирован с использованием UTF8 и назначен decriptedData.

+0

Или 'decryptedData' после исправления, конечно :) –

+0

Да! Вот что! благодаря! – Javi