Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

File To String [D7, XP]


nem0 ©   (2007-05-28 14:05:00) 

Привет! Пишу прогу на Delphi для шифрования текстовых файлов (алгоритм RSA).
Шифрование происходит при помощи процедуры
RSAEncrypt(OpenText : String{!!}; <ключ>; CodeText : String).
Хочу добавить возможность шифрования небольших файлов, не только txt, а например еще и jpg etc) Вопрос в том, как ентот файл загнать в String. ПАМАГИТЕ ПЛЗ! Курсач летит.
PS Опыт программирования 2 месяца)


Riply   (2007-05-28 17:02:00) [1]

> [18] Anatoly Podgoretsky ©   (28.05.07 16:41)
>Для стринг это лишнее!
Согласна. На автомате восприняла, как PChar :)


Anatoly Podgoretsky   (2007-05-28 16:41:00) [2]


> Судя по тому, что среди параметров RSAEncrypt нет DataSize,
>  то никак

Для стринг это лишнее!


iXT   (2007-05-28 15:43:00) [3]

> [16] Сергей М. ©   (28.05.07 15:21)

Нет, именно RSA, причем, именно 4096-bit.


Сергей М.   (2007-05-28 15:21:00) [4]


> RSA 4096bit интересует


Именно RSA ? Иные алгоритмы никак не устроят ? Скажем, AES-128 (Rijndael)?


Kolan   (2007-05-28 15:08:00) [5]

> String{!!};

Что интересно значить этот комментарий?


iXT   (2007-05-28 15:03:00) [6]

> [10] Сергей М. ©   (28.05.07 14:42)

А что еще есть? (RSA 4096bit интересует)


palva   (2007-05-28 15:00:00) [7]


Вот так можно занести содержимое двоичного файла в строку. Функция Length примененная к этой строке дает ее длину. Так что параметра "длина" можно не применять.

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils;
var
 s: String;
 fi: File;
 buf : Array [0..4095] of Char;
 redn, ofs: Integer;
begin
 AssignFile(fi, 'D:\TEMP\303316_6.jpg');
 FileMode := 0;
 Reset(fi, 1);
 SetLength(s, FileSize(fi));
 ofs := 1;
 repeat
   BlockRead(fi, buf, 4096, redn);
   Move(buf[0], s[ofs], redn);
   ofs := ofs + redn;
 until redn 4096;
 CloseFile(fi);
 // Òåïåðü ïðîâåðèì ïîñëåäíèé áàéò
 Write(Ord(s[length(s)]));
end.


nem0   (2007-05-28 14:56:00) [8]

Всем Big ThanXXX. Ща буду разбираться и тестить.


Jeer   (2007-05-28 14:48:00) [9]

Misc компоненты Indy

IdEncoderMime Encodes binary data into a text format using MIME encoding.
IdEncoderUUE Encodes binary data into a text format using UUE encoding.
IdEncoderXXE Encodes binary data into a text format using XXE encoding.


Сергей М.   (2007-05-28 14:42:00) [10]


> nem0   (28.05.07 14:35) [9]


А что, на FGInt свет клином сошелся ?


nem0   (2007-05-28 14:35:00) [11]


> Ну судя по фигурирующим ф-циям Copy() и Delete() приспособить
> эту ф-цию для работы с произвольными данными в строковом
> буфере нельзя.

Вот не хорошо это, ибо плохо


Сергей М.   (2007-05-28 14:30:00) [12]

Ну судя по фигурирующим ф-циям Copy() и Delete() приспособить эту ф-цию для работы с произвольными данными в строковом буфере нельзя.


nem0   (2007-05-28 14:30:00) [13]


> Преобразовать, например, в:
> -  hex-вид
> -  base-64

А поподробнее, каким образом это делается?


nem0   (2007-05-28 14:25:00) [14]


> Она, эта процедура, к тебе с Луны свалилась или ты ее сам
> написал ?

с луны, а точнее библиотека FGInt

rocedure RSAEncrypt(P : String; Var exp, modb : TFGInt; Var E : String);
Var
  i, j, modbits : longint;
  PGInt, temp, zero : TFGInt;
  tempstr1, tempstr2, tempstr3 : String;
Begin
  Base2StringToFGInt('0', zero);
  FGIntToBase2String(modb, tempstr1);
  modbits := length(tempstr1);
  convertBase256to2(P, tempstr1);
  tempstr1 := '111' + tempstr1;
  j := modbits - 1;
  While (length(tempstr1) Mod j) <> 0 Do tempstr1 := '0' + tempstr1;

  j := length(tempstr1) Div (modbits - 1);
  tempstr2 := '';
  For i := 1 To j Do
  Begin
     tempstr3 := copy(tempstr1, 1, modbits - 1);
     While (copy(tempstr3, 1, 1) = '0') And (length(tempstr3) > 1) Do delete(tempstr3, 1, 1);
     Base2StringToFGInt(tempstr3, PGInt);
     delete(tempstr1, 1, modbits - 1);
     If tempstr3 = '0' Then FGIntCopy(zero, temp) Else FGIntMontgomeryModExp(PGInt, exp, modb, temp);
     FGIntDestroy(PGInt);
     tempstr3 := '';
     FGIntToBase2String(temp, tempstr3);
     While (length(tempstr3) Mod modbits) <> 0 Do tempstr3 := '0' + tempstr3;
     tempstr2 := tempstr2 + tempstr3;
     FGIntdestroy(temp);
  End;

  While (tempstr2[1] = '0') And (length(tempstr2) > 1) Do delete(tempstr2, 1, 1);
  ConvertBase2To256(tempstr2, E);
  FGIntDestroy(zero);
End;


MBo   (2007-05-28 14:23:00) [15]


with TFileStream.Create(Filename, fmOpeRead) do begin
 SetLength(OpenTextString, Size);
 Read(OpenTextString[1], Size);
 Free;
end;


Jeer   (2007-05-28 14:23:00) [16]


> nem0   (28.05.07 14:05)


Преобразовать, например, в:
-  hex-вид
-  base-64


Сергей М.   (2007-05-28 14:22:00) [17]


> Шифрование происходит при помощи процедуры
> RSAEncrypt


Она, эта процедура, к тебе с Луны свалилась или ты ее сам написал ?


nem0   (2007-05-28 14:17:00) [18]

Так мона его добавить, расскажи че к чему ПЛЗ


Riply   (2007-05-28 14:09:00) [19]

> [0] nem0   (28.05.07 14:05)
>Шифрование происходит при помощи процедуры
>RSAEncrypt(OpenText : String{!!}; <ключ>; CodeText : String).
>Вопрос в том, как ентот файл загнать в String.
Судя по тому, что среди параметров RSAEncrypt нет DataSize, то никак


Наверх

Титульная страница Поиск, карта сайта Написать письмо