Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline sh4rk  
#1 Оставлено : 22 мая 2012 г. 13:53:22(UTC)
sh4rk

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.05.2012(UTC)
Сообщений: 6

извиняюсь за глупый вопрос. но что то я делаю не так. По идее в мемо вводим текст нажимаем зашифровать в другом мемо выводим. В папке с проектом лежат Wcrypt2.pas и wincryptex.pas . В результате выполнения выводится тот же самый текст.

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 
  CryptAcquireContext(@Prov,nil,nil ,PROV_GOST_2001_DH ,CRYPT_VERIFYCONTEXT); 
  Stream:=TMemoryStream.Create;
end;




Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  Hash: HCRYPTHASH;
  Key: HCRYPTKEY;
  BufLen, DataLen: DWORD;
  Str: String;
begin
  CryptCreateHash(Prov,CALG_SHA,0,0,@Hash);
  CryptHashData(Hash,PByte(Password),Length(Password),0);
  CryptDeriveKey(Prov,CALG_RC2,Hash,0,@Key);
  Stream.Clear;
  Stream.WriteBuffer(Pointer(mmIn.Text)^,Length(mmIn.Text));
  DataLen:=Length(mmIn.Text);
  BufLen:=Length(mmIn.Text);
  CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
  Stream.SetSize(BufLen);
  CryptEncrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen,BufLen);
  SetLength(Str,BufLen);
  Stream.Seek(0,soFromBeginning);
  Stream.ReadBuffer(Pointer(Str)^,BufLen);
  mmOut.Text:=Str;
  CryptDestroyKey(Key);
  CryptDestroyHash(Hash);
end;
Offline Kirill Sobolev  
#2 Оставлено : 22 мая 2012 г. 14:13:15(UTC)
Кирилл Соболев

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
CryptCreateHash(Prov,CALG_SHA,0,0,@Hash);
CryptHashData(Hash,PByte(Password),Length(Password),0);
CryptDeriveKey(Prov,CALG_RC2,Hash,0,@Key);

CALG_SHA и CALG_RC2 к шифрованию по ГОСТу не имеют никакого отношения.
Техническую поддержку оказываем тут
Наша база знаний
Offline sh4rk  
#3 Оставлено : 22 мая 2012 г. 14:26:01(UTC)
sh4rk

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.05.2012(UTC)
Сообщений: 6

а как же это всё реализовать?
Offline Андрей Писарев  
#4 Оставлено : 22 мая 2012 г. 14:28:12(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
sh4rk написал:
а как же это всё реализовать?

Нанять программиста, он знает, что есть SDK
Техническую поддержку оказываем тут
Наша база знаний
Offline sh4rk  
#5 Оставлено : 22 мая 2012 г. 14:34:31(UTC)
sh4rk

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.05.2012(UTC)
Сообщений: 6

хотелось бы самому научиться. но зашёл в тупик
Offline exsander  
#6 Оставлено : 4 июня 2012 г. 17:52:40(UTC)
exsander

Статус: Новичок

Группы: Участники
Зарегистрирован: 13.01.2012(UTC)
Сообщений: 5
Откуда: Россия, Белгородская обл.

Offline sh4rk  
#7 Оставлено : 26 июня 2012 г. 13:35:38(UTC)
sh4rk

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.05.2012(UTC)
Сообщений: 6

написал так но всё равно не работает что не так?
Код:

CryptAcquireContext(@Prov,nil,nil,PROV_GOST_DH,CRYPT_VERIFYCONTEXT);
...
  CryptCreateHash(Prov,CALG_GR3411,0,0,@Hash);
  CryptHashData(Hash,PByte(Password),Length(Password),0);
  CryptGenKey(Prov,CALG_G28147, 0,@Key);
  ....
  CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
  Stream.SetSize(BufLen);
  CryptEncrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen,BufLen);
  SetLength(Str,BufLen);
  Stream.Seek(0,soFromBeginning);
  Stream.ReadBuffer(Pointer(Str)^,BufLen);
  mmOut.Text:=Str;

Отредактировано пользователем 26 июня 2012 г. 13:36:16(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#8 Оставлено : 26 июня 2012 г. 13:40:55(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 14,190
Мужчина
Российская Федерация

Сказал «Спасибо»: 621 раз
Поблагодарили: 2397 раз в 1886 постах
sh4rk написал:
написал так но всё равно не работает что не так?
Код:

CryptAcquireContext(@Prov,nil,nil,PROV_GOST_DH,CRYPT_VERIFYCONTEXT);
...
  CryptCreateHash(Prov,CALG_GR3411,0,0,@Hash);
  CryptHashData(Hash,PByte(Password),Length(Password),0);
  CryptGenKey(Prov,CALG_G28147, 0,@Key);
  ....
  CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
  Stream.SetSize(BufLen);
  CryptEncrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen,BufLen);
  SetLength(Str,BufLen);
  Stream.Seek(0,soFromBeginning);
  Stream.ReadBuffer(Pointer(Str)^,BufLen);
  mmOut.Text:=Str;


Цитата:

CryptCreateHash(Prov,CALG_GR3411,0,0,@Hash);
CryptHashData(Hash,PByte(Password),Length(Password),0);

а что делает "это" в коде по шифрованию (видно же, что не используется)?

Цитата:

но всё равно не работает

не работает и без ошибок? молчит?

Цитата:

что не так?

в коде и \или\ в используемом заголовочном файле (Wcrypt2.pas)...

Отредактировано пользователем 26 июня 2012 г. 13:44:03(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline sh4rk  
#9 Оставлено : 26 июня 2012 г. 17:43:12(UTC)
sh4rk

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.05.2012(UTC)
Сообщений: 6

Вот блин! Не совсем то отправил(
Вот так. Но пробовал я по разному.


CryptAcquireContext(@Prov,nil,nil,PROV_GOST_DH,CRYPT_VERIFYCONTEXT);
...
CryptCreateHash(Prov,CALG_GR3411,0,0,@Hash);
CryptHashData(Hash,PByte(Password),Length(Password),0);
CryptDeriveKey(Prov,CALG_G28147,Hash,0,@Key);
....
CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
Stream.SetSize(BufLen);
CryptEncrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen,BufLen);
SetLength(Str,BufLen);
Stream.Seek(0,soFromBeginning);
Stream.ReadBuffer(Pointer(Str)^,BufLen);
mmOut.Text:=Str;

Нет ли ошибки в типах алгоритмов? Стандартные работают. типа RSA FULL и тд. Gost 2001 шифрует правда не знаю правильно ли. Но мне всё равно нужно просто шифрование. а на выходе тот же самый текст
Offline sh4rk  
#10 Оставлено : 27 июня 2012 г. 19:36:14(UTC)
sh4rk

Статус: Новичок

Группы: Участники
Зарегистрирован: 22.05.2012(UTC)
Сообщений: 6

Шифрует
Код:
CryptAcquireContext(@Prov,nil,nil,PROV_GOST_2001_DH,CRYPT_VERIFYCONTEXT);
...
CryptCreateHash(Prov,CALG_GR3411,0,0,@Hash);
CryptHashData(Hash,PByte(Password),Length(Password),0);
CryptDeriveKey(Prov,CALG_G28147,Hash,CRYPT_EXPORTABLE,@Key);
....
CryptEncrypt(Key,0,true,0,nil,@BufLen,0);
Stream.SetSize(BufLen);
CryptEncrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen,BufLen);
SetLength(Str,BufLen);
Stream.Seek(0,soFromBeginning);
Stream.ReadBuffer(Pointer(Str)^,BufLen);
mmOut.Text:=Str;


А вот функция расшифрования

Код:
  CryptCreateHash(Prov,CALG_GR3411,0,0,@Hash);
  CryptHashData(Hash,PByte(Password),Length(Password),0);
  CryptDeriveKey(Prov,CALG_G28147,Hash,CRYPT_EXPORTABLE,@Key);
  DataLen:=Stream.Size;
  CryptDecrypt(Key,0,true,0,PByte(Stream.Memory),@DataLen);
  SetLength(Str,DataLen);
  Stream.Seek(0,soFromBeginning);
  Stream.ReadBuffer(Pointer(Str)^,DataLen);


не пойму почему на выходе не открытый текст

Отредактировано пользователем 27 июня 2012 г. 19:37:56(UTC)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.