Шифрование DES в C # - PullRequest
       22

Шифрование DES в C #

3 голосов
/ 16 апреля 2009

Возьмите следующий код:

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
ICryptoTransform encryptor = des.CreateEncryptor();
// encrypt
byte[] x = UTF8Encoding.UTF8.GetBytes("thisIsATEST");
byte[] enc = encryptor.TransformFinalBlock(x, 0, x.Length);
string savedValue = Convert.ToBase64String(enc);



DESCryptoServiceProvider des1 = new DESCryptoServiceProvider();
des1.Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
ICryptoTransform decryptor = des1.CreateDecryptor();
byte[] y = Convert.FromBase64String(savedValue);
// decrypt
byte[] originalAgain = decryptor.TransformFinalBlock(y, 0, y.Length);
System.Text.ASCIIEncoding e = new System.Text.ASCIIEncoding();
string str = e.GetString(originalAgain);

Теперь это не работает для расшифровки, однако, если des1.CreateDecryptor (); заменен на des.CreateDecryptor (); , он работает нормально, и я не уверен, почему если я использую точно такой же ключ.

Это не исключение, а неправильное преобразование строки.

Ответы [ 2 ]

5 голосов
/ 16 апреля 2009

Если вы не используете что-то вроде режима ECB, для расшифровщика необходим вектор инициализации, используемый шифрователем.

4 голосов
/ 16 апреля 2009

Поскольку вы не устанавливаете вектор инициализации (IV), DESCryptoServiceProvider автоматически сгенерирует его для вас, и, поскольку у вас есть 2 отдельных экземпляра, они будут отличаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...