IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Результат DES шифрования (http://www.imho.ws/showthread.php?t=102645)

EvroStandart 21.04.2006 13:35

Результат DES шифрования
 
Очередная запарка.

Кто с шифрованием DES работал? Шифрую 8 байт, получаю результат на 16. А нужен результат на 8...

Палево!

:idontnow:

_Lynx_ 21.04.2006 14:08

Цитата:

Сообщение от EvroStandart
Кто с шифрованием DES работал? Шифрую 8 байт, получаю результат на 16. А нужен результат на 8...

А как делал? Сам алгоритм писал или функции какие-то использовал?
чем шифровал

Willow 22.04.2006 23:41

Шифр DES блочный шифр с размером блока 64бита (8 байт). Если после шифрования входного блока получается блок иного размера, то очевидно одно где-то ошибка.

EvroStandart 24.04.2006 10:40

Я пробовал на C#. Использовал стандартные функции из .NET
Код такой:

MemoryStream memoryStream = new MemoryStream();
byte[] cr = { 155, 156, 135, 170, 210, 232, 108, 198 };
byte[] field = { 105, 25, 131, 203, 171, 234, 78, 8 };
DES alg = DES.Create();
alg.Key = cr;
alg.IV = field;
alg.Mode = CipherMode.ECB;
CryptoStream cs = new CryptoStream(memoryStream, alg.CreateEncryptor(), CryptoStreamMode.Write);
cs.Write(field, 0, 8);
cs.Close();
byte[] resp_t1 = memoryStream.ToArray();

После строчки cs.Write его длинна 8. После cs.Close уже 16 и в resp_t1 записывается 16.
Может есть какие-то другие библиотеки или на другом языке маленькую библиотеку оформить? В .NET я пол дня копался и ничего не нашёл...

_Lynx_ 24.04.2006 17:00

Поменяй последние две строчки местами.

.
Закрывает поток и освобождает используемые ресурсы.
я так понимаю что сбрасывается буфер.

Или же смотри http://www.aspnetmania.com/Code/Code/30.html
Там точно работает.

Примеров много, стоит только поискать.
Тем более ты будешь шифровать поток.

EvroStandart 25.04.2006 11:25

Цитата:

_Lynx_:
Или же смотри http://www.aspnetmania.com/Code/Code/30.html
Там точно работает.
Там используются теже функции, что и у меня. Только оформление другое. Я так тоже пробовал. Всё равно 16 получается.

Цитата:

_Lynx_:
Поменяй последние две строчки местами.
Тогда просто первые 8 байт останутся. При попытке расшифровать обратно .NET хочет получить все 16. На 8 вылетает ошибка.
Наверно нужна другая библиотека для шифрования...

_Lynx_ 26.04.2006 13:32

UnicodeEncoding unicodeEncoding = new UnicodeEncoding();
byte[] inputByteArray = unicodeEncoding.GetBytes(inputString);
byte[] outputByteArray;
MemoryStream outputMemoryStream = new MemoryStream();
DES des = new DESCryptoServiceProvider();
CryptoStream cryptoStream =
new CryptoStream(outputMemoryStream,
des.CreateEncryptor(Cryptographer.Key,
Cryptographer.IV),
CryptoStreamMode.Write);
cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);
outputMemoryStream.Position = 0;
outputByteArray=outputMemoryStream.ToArray();
cryptoStream.Close();
outputMemoryStream.Close();
return unicodeEncoding.GetString(outputByteArray);

Всё отрабатывает и даже потом расшифровывается:

UnicodeEncoding unicodeEncoding = new UnicodeEncoding();
byte[] inputByteArray = unicodeEncoding.GetBytes(inputString);
byte[] outputByteArray;
MemoryStream outputMemoryStream = new MemoryStream();
DES des = new DESCryptoServiceProvider();
CryptoStream cryptoStream =
new CryptoStream(outputMemoryStream,
des.CreateDecryptor(Cryptographer.Key,
Cryptographer.IV),
CryptoStreamMode.Write);
cryptoStream.Write(inputByteArray, 0, inputByteArray.Length);
outputMemoryStream.Position = 0;
outputByteArray=outputMemoryStream.ToArray();
outputMemoryStream.Close();
return unicodeEncoding.GetString(outputByteArray);

Вначале естественно была инициализация:

static Cryptographer()
{ //загрузить определённые ключи
byte[] cr = { 155, 156, 135, 170, 210, 232, 108, 198 };
byte[] field = { 105, 25, 131, 203, 171, 234, 78, 8 };
DES alg = DES.Create();
alg.Key = cr;
alg.IV = field;
alg.Mode = CipherMode.ECB;
Cryptographer.IV = alg.IV;
Cryptographer.Key = alg.Key;
/* или же можно сгенерить
DES des = new DESCryptoServiceProvider();
des.GenerateIV();
des.GenerateKey();
Cryptographer.IV = des.IV;
Cryptographer.Key = des.Key;
*/
}


Часовой пояс GMT +4, время: 15:27.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.