imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 21.04.2006, 13:35     # 1
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Question Результат DES шифрования

Очередная запарка.

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

Палево!

EvroStandart вне форума  
Старый 21.04.2006, 14:08     # 2
_Lynx_
Junior Member
 
Регистрация: 11.10.2005
Сообщения: 63

_Lynx_ Путь к славе только начался
Цитата:
Сообщение от EvroStandart
Кто с шифрованием DES работал? Шифрую 8 байт, получаю результат на 16. А нужен результат на 8...
А как делал? Сам алгоритм писал или функции какие-то использовал?
чем шифровал
_Lynx_ вне форума  
Старый 22.04.2006, 23:41     # 3
Willow
Junior Member
 
Регистрация: 23.12.2003
Адрес: Киев
Сообщения: 118

Willow Реально крут(а)Willow Реально крут(а)Willow Реально крут(а)Willow Реально крут(а)
Шифр DES блочный шифр с размером блока 64бита (8 байт). Если после шифрования входного блока получается блок иного размера, то очевидно одно где-то ошибка.
Willow вне форума  
Старый 24.04.2006, 10:40     # 4
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

EvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собойEvroStandart Имеются все основания чтобы гордиться собой
Я пробовал на 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 я пол дня копался и ничего не нашёл...
EvroStandart вне форума  
Старый 24.04.2006, 17:00     # 5
_Lynx_
Junior Member
 
Регистрация: 11.10.2005
Сообщения: 63

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

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

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

Примеров много, стоит только поискать.
Тем более ты будешь шифровать поток.
_Lynx_ вне форума  
Старый 25.04.2006, 11:25     # 6
EvroStandart
Full Member
 
Аватар для EvroStandart
 
Регистрация: 20.01.2004
Адрес: Таллинн
Пол: Male
Сообщения: 623

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

Цитата:
_Lynx_:
Поменяй последние две строчки местами.
Тогда просто первые 8 байт останутся. При попытке расшифровать обратно .NET хочет получить все 16. На 8 вылетает ошибка.
Наверно нужна другая библиотека для шифрования...
EvroStandart вне форума  
Старый 26.04.2006, 13:32     # 7
_Lynx_
Junior Member
 
Регистрация: 11.10.2005
Сообщения: 63

_Lynx_ Путь к славе только начался
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;
*/
}
_Lynx_ вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


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




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