Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2017, 12:03   #1
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 33
По умолчанию Использование библиотеки DcpCrypt

Уважаемые знатоки, не подскажите ли, как при помощи библиотеки DcpCrypt решить задачу:
Зашифровать (расшифровать) данные по алгоритму DEC-CBC c ключом ="0000000000000000" (используется только 56 бит)
и вектором "0000000000000000" (8 байт - используется все 64 бит)
Используется ANSII кодировка

Делаю расшифровку так:

Код:
function DoDecrypt: string;
var
  Cipher: TDCP_des;
  KeyStr: string;
  TextIn, TextOut: string;
  Vector: array of Byte;
  src, enc, b64: TBytes;
  I, index, lunghezza, blocksize, paddingsize: integer;

begin
  SetLength(Vector, 8);
  for i := 0 to 7 do Vector[i] := 0;
  KeyStr := '00000000';
  Cipher := TDCP_des.Create(nil);
  Cipher.Init(keystr, Length(keystr) * 8, addr(Vector[0]));
  TextIn := 'pve%`,n_><Y,RH$nphZd)? K JSN\2';
  Cipher.InitStr(TextIn, TDCP_sha1);
  lunghezza := Length(TextIn);
  index := SizeOf(TextIn);
  blocksize := Cipher.BlockSize div 8;
  paddingsize := blocksize - (lunghezza mod blocksize);
  Inc(lunghezza, paddingsize);
  SetLength(TextIn, lunghezza);
  for index := paddingsize downto 1 do
  begin
    TextIn[lunghezza - index] := char(0);
  end;
  index := Length(TextOut);
  SetLength(TextOut, lunghezza);
  Cipher.DecryptCBC(TextIn[1], TextOut[1], length(TextIn));
  Result := Cipher.DecryptString(TextOut);
end;
Но получается абракадабра

P.S.: Знаю, что слово 'pve%`,n_><Y,RH$nphZd)? K JSN\2' вполне читаемо должно расшифроваться

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 20.06.2017 в 13:20.
ComAlex вне форума Ответить с цитированием
Старый 20.06.2017, 13:24   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

какая у Вас Delphi?
если unicode, тогда попробуйте все String заменить на AnsiString

Цитата:
Сообщение от ComAlex Посмотреть сообщение
Знаю, что слово 'pve%`,n_><Y,RH$nphZd)? K JSN\2' вполне читаемо должно расшифроваться
откуда такая уверенность?
обычно правильность проверяют так - сначала шифруют данные, потом полученный шифротекст расшифровывают и сравнивают полученные данные с исходными.
а просто так вставить в исходный код шифротекст (да ещё непонятно в какой кодировке, да ещё неизвестно, возможно содержающую НЕПЕЧАТНЫЕ символы) - это верх самонадеянности.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2017, 16:25   #3
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 33
По умолчанию

У меня: Delphi XE 10.1 (Berlin)
ComAlex вне форума Ответить с цитированием
Старый 20.06.2017, 16:56   #4
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 33
По умолчанию

Параллельно работает С-программа, написанная давно, которая показывает коды символов, т.е. я сверяюсь с ней.
У меня задача - переписать её на Delphi
ComAlex вне форума Ответить с цитированием
Старый 20.06.2017, 16:56   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ComAlex Посмотреть сообщение
У меня: Delphi XE 10.1 (Berlin)
это unicode.

пробуйте заменить все String на AnsiString
и
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
обычно правильность проверяют так - сначала шифруют данные, потом полученный шифротекст расшифровывают и сравнивают полученные данные с исходными.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.06.2017, 17:36   #6
ComAlex
Пользователь
 
Регистрация: 27.08.2012
Сообщений: 33
По умолчанию

Спасибо, проверю, но меня больше интересует, правильно ли я переложил текст задания в алгоритм

Задание: "Алгоритм реализация des и cbc -стандартный.
Алгоритм des работает с блоками данных по 8 байт.
Соответственно, ключ и вектор имеют размер 8 байт.
Это 8 символов или 16 шестнадцатеричных знаков (от 0 до F) или 64 бита.
У вектора используются все 64 бита, а у ключа только 56 бит используются.
Кодировка сообщений – win-1251"

Правильно ли я ввел в процедуры все параметры, исходя из описания.
Правильно ли всё написано?

Опыта в этом нет

2. Есть ли в природе компонента DcpCrypt для Delphi XE10.1 или еще не написали. Если есть, киньте ссылку

Последний раз редактировалось ComAlex; 20.06.2017 в 17:38.
ComAlex вне форума Ответить с цитированием
Старый 20.06.2017, 17:52   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ComAlex Посмотреть сообщение
Спасибо, проверю
попробуйте. но не факт, что это поможет.

я погуглил.
и, судя по страничке на GitHub, поддерживаются unicode версии Delphi (включая Delphi XE7 -
DCP_XE7.dpk)

попробуйте ещё шифровать не строки (где возможны проблемы из-за unicode) и бинарные массивы (array of byte или TStream).

Цитата:
Сообщение от ComAlex Посмотреть сообщение
Правильно ли я ввел в процедуры все параметры, исходя из описания.
с этим я ничем не помогу, это за рамками моей компетенции.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
использование библиотеки string.h novichal Помощь студентам 2 01.05.2017 18:42
Использование библиотеки excellibrary.dll ольгаг Общие вопросы .NET 10 09.02.2016 22:48
Использование библиотеки на C# в Delhi Crococo C# (си шарп) 4 17.04.2014 12:26
Использование библиотеки <stdio.h> Ame Помощь студентам 0 11.05.2011 22:32
Использование библиотеки C и C++ demon9992 Помощь студентам 3 30.03.2011 22:14