Взял код для работы с DES с сайта MSDN:
private byte[] encryptDES(byte[] Data, byte[] Key, byte[] IV)
{
try
{
// Create a MemoryStream.
MemoryStream mStream = new MemoryStream();
// Create a new DES object.
DES DESalg = DES.Create();
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream(mStream,
DESalg.CreateEncryptor(Key, IV),
CryptoStreamMode.Write);
// Write the byte array to the crypto stream and flush it.
cStream.Write(Data, 0, Data.Length);
cStream.FlushFinalBlock();
// Get an array of bytes from the
// MemoryStream that holds the
// encrypted data.
byte[] ret = mStream.ToArray();
// Close the streams.
cStream.Close();
mStream.Close();
// Return the encrypted buffer.
return ret;
}
catch (CryptographicException ex)
{
return null;
}
}
private byte[] decriptDES(byte[] Data, byte[] Key, byte[] IV)
{
try
{
// Create a new MemoryStream using the passed
// array of encrypted data.
MemoryStream msDecrypt = new MemoryStream(Data);
// Create a new DES object.
DES DESalg = DES.Create();
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream csDecrypt = new CryptoStream(msDecrypt,
DESalg.CreateDecryptor(Key, IV),
CryptoStreamMode.Read);
// Create buffer to hold the decrypted data.
byte[] fromEncrypt = new byte[Data.Length];
// Read the decrypted data out of the crypto stream
// and place it into the temporary buffer.
csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
//Convert the buffer into a string and return it.
return fromEncrypt;
}
catch (CryptographicException ex)
{
return null;
}
}
В метод шифрования передаю 64-битовые сообщение и ключ. На выходе я получаю 128 битов. Дешифровав их, я получаю своё 64-разрядное сообщение и 64 нуля. Буду признателен, если подскажите, как убрать лишние разряды.
DES - блочный алгоритм, и размер массива зашифрованных данных в нем кратен размеру блока.
Проблема в коде дешифоровки в том, что он возвращает результат в массиве, по размеру равному массиву зашифрованных данных:
byte[] fromEncrypt = new byte[Data.Length];
Хотя точное количество дешифрованных байт возвращается методом Read. Достаточно просто выделить буфер нужного размера и скопировать в него результат:
var total = csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
byte[] result = new byte[total];
Array.Copy(fromEncrypt, result, total);
return result;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сижу делаю приложуньку, которая работает с базой данныхИ случайно удалил модель ADO
Имеются проблемы с элементом FlowLayoutPanel в программеУ меня существует UserControlPanel - так вот этот элемент я в отдельном потоке бесконечно, добавляю...
Здравствуйтеинтересует вопрос, как сделать перемещение 2d объектов с помощью перемещения пальца по экрану