Алгоритм шифрования [Решено]

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

vada
Но 100%-ной уверенности всё же нет? :)
poiuyt555
новенький
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Сообщение poiuyt555 »

разные способы попробовал и текстовый файл, и просто через filestream.
Видимо проблема: не удается корректно записать строку и прочитать ее из файла.

Добавлено спустя 12 минут 20 секунд:
Вроде заработало!
Теперь через текстовый файл работает.
Спасибо.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Народ, чего OPENSSL (и FPC-интрефейс к ней) так не любим ? Она все это умеет :)
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

debi12345 тяжеловат для тривиальных задач.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Может быть (имеются вивиду лишние ДЛЛ-ки?), но освоившись с ней (плюс Мартин написал отличные фронтэнды) - теперь наслаждаюсь :) И симметричное шифрование, и несимметричное, и хэширование, и контрольные суммы...
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

debi12345 писал(а):Может быть (имеются вивиду лишние ДЛЛ-ки?), но освоившись с ней (плюс Мартин написал отличные фронтэнды) - теперь наслаждаюсь :) И симметричное шифрование, и несимметричное, и хэширование, и контрольные суммы...

Кто такой Мартин? :)
А где про это почитать не подскажите? Чего-то не могу ничего толком найти. В synapse есть ssl_openssl*.pas файлы. Но там нет Мартина.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

resident, автор mse.
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

{mse-dir}\lib\common\crypto\msessl.pas
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Спасиб :)
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

Вот простенький модуль который я использую, на базе тех компонентов :

Код: Выделить всё

unit cryptoutils;
{$ifdef FPC}{$mode objfpc}{$h+}{$endif}
interface

uses
  msestrings
 ,msetypes 
 ,msessl
 ,msecryptohandler
;

function symbase64cypherfrom(const avalue: ansistring; const apassw: msestring; const cypher_name: msestring = 'aes-256-cfb'): msestring;
function symbase64cypherto(const avalue: msestring; const apassw: msestring; const cypher_name: msestring = 'aes-256-cfb'): ansistring;
function getsha256(const adigest: tdigesthandler; const afile: filenamety): ansistring;
function getsha256(const afile: filenamety): ansistring;
function getsha256str(const avalue: msestring): ansistring;

implementation

uses
  msestream,
  mseformatstr
;

function symbase64cypherto(const avalue: msestring; const apassw: msestring; const cypher_name: msestring = 'aes-256-cfb'): ansistring;
begin
with tbase64handler.create(nil) do begin
try
  chain:= tsymciphercryptohandler.create(nil);
  with tsymciphercryptohandler(chain) do begin
    ciphername:= cypher_name;
    keyphrase:= stringtoutf8(apassw);
  end;
  result:= printableascii(encrypt(stringtoutf8(avalue)));
finally 
  chain.free;
  free;
end;
end;
end;

//---------------------------------------------

function symbase64cypherfrom(const avalue: ansistring; const apassw: msestring; const cypher_name: msestring = 'aes-256-cfb'): msestring;
begin
with tbase64handler.create(nil) do begin
try
  chain:= tsymciphercryptohandler.create(nil);
  with tsymciphercryptohandler(chain) do begin
    ciphername:= cypher_name;
    keyphrase:= stringtoutf8(apassw);
  end;
  result:= utf8tostring(decrypt(avalue));
finally 
  chain.free;
  free;
end;
end;
end;

//---------------------------------------------

function getsha256(const adigest: tdigesthandler; const afile: filenamety): ansistring;
var s: ansistring; fstrm: tmsefilestream;
begin
result:= '';
fstrm:= nil;
fstrm:= tmsefilestream.create(afile);
try
  adigest.digestname:= 'sha256';
  fstrm.cryptohandler:= adigest;
  fstrm.readdatastring; // вычисляем его хэш
  s:= adigest.digest(fstrm);
finally
  if fstrm <> nil then begin
    fstrm.free;
  end;
end;
result:= lowercase(bytestrtostr(s));
end;

function getsha256(const afile: filenamety): ansistring;
var
  s: ansistring;
  adigest: tdigesthandler;
begin
result:= '';
adigest:= tdigesthandler.create(nil);
try
  result:= getsha256(adigest,afile);
finally
  adigest.free;
end;
end;

//-----------------------------------

function getsha256str(const avalue: msestring): ansistring;
var
  s: ansistring;
  fstrm: tmsefilestream;
  dgst: tdigesthandler;
begin
result:= '';
fstrm:= tmsefilestream.create; {memory file}
dgst:= tdigesthandler.create(nil);
try
  dgst.digestname:= 'sha256';
  fstrm.cryptohandler:= dgst;
  fstrm.readdatastring; // вычисляем его хэш
  s:= dgst.digest(fstrm);
finally
  fstrm.free;
  dgst.free;
end;
result:= lowercase(bytestrtostr(s));
end;

//-----------------------------------



end.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Здрасть :)
При RSA шифровании каждый раз получается различная шифрованная строка. Это нормально?

з.ы. Вот нашел похожую тему:
http://www.gotdotnet.ru/forums/2/92922/
Аватара пользователя
debi12345
долгожитель
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Сообщение debi12345 »

При RSA шифровании каждый раз получается различная шифрованная строка. Это нормально?

Если используется случайная затравка ("salt") - то да.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Спасиб :)
Ответить