![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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, то никак