49685 (Защита информации от несанкционированного доступа), страница 3

2016-07-30СтудИзба

Описание файла

Документ из архива "Защита информации от несанкционированного доступа", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49685"

Текст 3 страницы из документа "49685"

end;

end;

procedure TOptionsForm.BitBtn1Click(Sender: TObject);

var i: integer;

begin

UsedMethodsBox.Clear;

for i:=1 to QolMethods do

begin

UsedMethodsBox.Items.Add(Methods[i].MethodName);

Used[i]:=true;

end;

EnableKeys(True);

end;

procedure TOptionsForm.UsedMethodsBoxClick(Sender: TObject);

var

i: integer;

begin

If (UsedMethodsBox.ItemIndex=-1)or

(UsedMethodsBox.Items.Count=0) then

begin

EnableKeys(False);

DescMemo.Clear;

Exit;

end else

begin

EnableKeys(True);

end;

i:=MethodIndex(UsedMethodsBox.Items.Strings[UsedMethodsBox.ItemIndex]);

if i=0 then exit;

DirectionGroup.ItemIndex:=UsedMethods[i].Direction-1;

KeyEdit.MaxLength:=Methods[i].KeyMaxLength;

KeyEdit.Text:=String(UsedMethods[i].Key);

WayCountEdit.Value:=UsedMethods[i].WayCount;

DescMemo.Clear;

DescMemo.Lines.Append(Methods[i].MethodDescription);

end;

procedure TOptionsForm.DirectionGroupExit(Sender: TObject);

var

i: integer;

begin

If (UsedMethodsBox.ItemIndex=-1)or

(UsedMethodsBox.Items.Count=0) then Exit;

i:=MethodIndex(UsedMethodsBox.Items.Strings[UsedMethodsBox.ItemIndex]);

if i=0 then exit;

UsedMethods[i].Direction:=DirectionGroup.ItemIndex+1;

end;

procedure TOptionsForm.KeyEditExit(Sender: TObject);

var

i: integer;

begin

If (UsedMethodsBox.ItemIndex=-1)or

(UsedMethodsBox.Items.Count=0) then

Exit;

i:=MethodIndex(UsedMethodsBox.Items.Strings[UsedMethodsBox.ItemIndex]);

if i=0 then exit;

StrPCopy(UsedMethods[i].Key,KeyEdit.Text);

end;

procedure TOptionsForm.WayCountEditExit(Sender: TObject);

var

i: integer;

begin

If (UsedMethodsBox.ItemIndex=-1)or

(UsedMethodsBox.Items.Count=0) then

Exit;

i:=MethodIndex(UsedMethodsBox.Items.Strings[UsedMethodsBox.ItemIndex]);

if i=0 then exit;

UsedMethods[i].WayCount:=WayCountEdit.Value;

end;

procedure TOptionsForm.FormClose(Sender: TObject;

var Action: TCloseAction);

var

i: integer;

begin

Action:=caHide;

for i:=1 to QolMethods do

begin

if Used[i] then

begin

if StrLen(UsedMethods[i].Key)

begin

ShowMessage(Methods[i].MethodName+': '+Methods[i].KeyMinMessage);

Action:=caNone;

Exit;

end else

if StrLen(UsedMethods[i].Key)>Methods[i].KeyMaxLength then

begin

ShowMessage(Methods[i].MethodName+': '+Methods[i].KeyMaxMessage);

Action:=caNone;

Exit;

end;

end;

end;

end;

end.

unit ProgressUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

ComCtrls, StdCtrls;

type

TProgressForm = class(TForm)

Label1: TLabel;

PBOne: TProgressBar;

PBAll: TProgressBar;

Label2: TLabel;

private

{ Private declarations }

public

Current: integer;

procedure UpdateProgress(fn: String;perc:integer;Cap:String);

procedure InitProgress(qol:integer;Cap:String);

procedure EndProcess;

{ Public declarations }

end;

var

ProgressForm: TProgressForm;

implementation

{$R *.DFM}

procedure TProgressForm.EndProcess;

begin

inc(current);

end;

procedure TProgressForm.UpdateProgress;

begin

ProgressForm.Caption:=Cap+' - '+inttostr(round(PBAll.Position*100/PBAll.Max))+'%';

Label1.Caption:=Cap+fn;

PBOne.Position:=perc;

PBAll.Position:=100*Current+perc;

end;

procedure TProgressForm.InitProgress;

begin

Caption:=Cap;

Label1.Caption:='Подготовка...';

PBOne.Position:=0;

PBOne.Max:=100;

PBAll.Position:=0;

PBAll.Max:=qol*100;

Current:=0;

end;

end.

unit TestUnit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ActnList, ExtCtrls, ComCtrls, ToolWin, Grids, Outline, DirOutln,

Buttons, ShellApi, Registry;

type

TMainForm = class(TForm)

Label1: TLabel;

RecurseBox: TCheckBox;

BitBtn1: TBitBtn;

StaticText1: TStaticText;

MainKey: TEdit;

BitBtn2: TBitBtn;

Open: TOpenDialog;

BitBtn3: TBitBtn;

BitBtn4: TBitBtn;

BitBtn5: TBitBtn;

BitBtn6: TBitBtn;

files: TListBox;

procedure FileDrop(var Msg: TWMDropFiles); message WM_DROPFILES;

procedure AddCmdLine(var msg: TMessage); message WM_USER;

procedure FormCreate(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure DoCommandLine(S: String);

procedure StopDblClick(Sender: TObject);

procedure GoDblClick(Sender: TObject);

procedure GenerateKey;

function DecodeKey: integer;

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

private

{ Private declarations }

public

end;

var

MainForm: TMainForm;

Decode: boolean;

implementation

uses CodingUnit, OptionsUnit, ProgressUnit;

{$R *.DFM}

procedure TMainForm.GenerateKey;

var

i,k,l: integer;

s: string;

begin

for i:=1 to QolMethods do

begin

If Used[i] then

begin

k:=random(9)+1;

s:=concat(s,Methods[i].MethodKey);

s:=concat(s,IntToStr(k));

l:=strlen(UsedMethods[i].Key)+k*6;

s:=concat(s,Format('%2d',[l]));

s:=concat(s,StrPas(UsedMethods[i].Key));

s:=concat(s,Format('%2d',[strlen(UsedMethods[i].Key)+k*5+UsedMethods[i].Direction]));

s:=concat(s,Format('%2d',[strlen(UsedMethods[i].Key)+k*4+UsedMethods[i].WayCount]));

end;

end;

for i:=1 to length(s) do if s[i]=' ' then s[i]:='-';

MainKey.Text:=S;

end;

function TMainForm.DecodeKey;

var

i,k,l,t: integer;

s: string;

begin

Result:=0;

s:=MainKey.Text;

for i:=1 to length(s) do if s[i]='-' then s[i]:='0';

try

while s<>'' do

begin

t:=MethodByChar(s[1]);

Used[t]:=true;

delete(s,1,1);

k:=strtoint(copy(s,1,1));

delete(s,1,1);

l:=strtoint(copy(s,1,2))-k*6;

delete(s,1,2);

StrPCopy(UsedMethods[t].Key,copy(s,1,l));

delete(s,1,l);

UsedMethods[t].Direction:=strtoint(copy(s,1,2))-l-k*5;

delete(s,1,2);

UsedMethods[t].WayCount:=strtoint(copy(s,1,2))-l-k*4;

delete(s,1,2);

end;

except

on E:Exception do Result:=1;

end;

end;

Procedure TMainForm.DoCommandLine(S: String);

var

i: integer;

tmp: string;

begin

System.CmdLine:=PChar(S);

tmp:=ParamStr(1);

if CompareText(tmp,'/D')=0 then

begin

// декодирование

Decode:=true;

StaticText1.Caption:='Введите ключ';

MainKey.Color:=clWindow;

MainKey.ReadOnly:=false;

MainKey.Text:='';

if ParamCount>1 then

begin

for i:=2 to ParamCount do

begin

Files.Items.Add(ParamStr(i));

end;

end;

end else

begin

//кодирование

if ParamCount>0 then

for i:=1 to ParamCount do

begin

Files.Items.Add(ParamStr(i));

end;

Decode:=False;

end;

end;

procedure TMainForm.AddCmdLine(var msg: TMessage);

//var

// P: array[0..1024]of char;

begin

// GlobalGetAtomName(msg.WParam,p,1023);

// GlobalDeleteAtom(msg.WParam);

// DoCommandLine(String(P));

end;

procedure TMainForm.FormCreate(Sender: TObject);

begin

Caption:='Кодирование';

DragAcceptFiles(Handle,TRUE);

if Decode then BitBtn1.Enabled:=false;

end;

procedure TMainForm.BitBtn1Click(Sender: TObject);

begin

OptionsForm.ShowModal;

end;

procedure TMainForm.StopDblClick(Sender: TObject);

begin

Close;

end;

procedure ValidateFiles;

var

i,k: integer;

begin

with MainForm.Files do

begin

i:=0;

while i<=Items.Count-2 do

begin

k:=i+1;

while k<=Items.Count-1 do

begin

if CompareText(Items.Strings[i],Items.Strings[k])=0 then

begin

Items.Delete(k);

continue;

end;

inc(k);

end;

inc(i);

end;

end;

end;

procedure TMainForm.FileDrop(var msg:TWMDropFiles);

var

i,count: integer;

p: pchar;

s: string;

attr:LongWord;

begin

msg.Result:=0;

count:=DragQueryFile(Msg.Drop,$ffffffff,nil,0);

getmem(p,1024);

for i:=0 to count-1 do

begin

DragQueryFile(msg.Drop,i,p,1024);

s:=StrPas(p);

attr:=GetFileAttributes(PCHAR(s));

if attr<>$ffffffff then

begin

if (attr and FILE_ATTRIBUTE_DIRECTORY) = 0 then

begin

if Decode then

begin

if Pos('.crf',lowercase(s))<>0 then

files.Items.Add(s);

end else

begin

if Pos('.crf',lowercase(s))=0 then

files.Items.Add(s);

end;

end;

end;

end;

freemem(p,1024);

DragFinish(msg.Drop);

ValidateFiles;

end;

function NoMethods:Boolean;

var

i:integer;

begin

result:=true;

for i:=1 to QolMethods do if used[i] then result:=false;

end;

procedure TMainForm.GoDblClick(Sender: TObject);

var

i: integer;

begin

if files.Items.Count=0 then

begin

ShowMessage('Список файлов пуст');

Exit;

end;

ValidateFiles;

if Decode then

begin

if MainKey.Text='' then begin

ShowMessage('Вы забыли ввести ключ');

exit;

end;

if DecodeKey<>0 then begin

ShowMessage('Введен неправильный ключ');

Exit;

end;

if NoMethods then begin

ShowMessage('Не выбрано ни одного метода');

Exit;

end;

ProgressForm.InitProgress(files.Items.Count,'Декодирование');

ProgressForm.Show;

for i:=0 to files.items.count-1 do

begin

DoDecoding(files.items.strings[i]);

end;

ProgressForm.Hide;

end else

begin

if NoMethods then begin

ShowMessage('Не выбрано ни одного метода');

Exit;

end;

ProgressForm.InitProgress(files.Items.Count,'Кодирование');

ProgressForm.Show;

for i:=0 to files.items.count-1 do

begin

DoCoding(files.items.strings[i]);

end;

ProgressForm.Hide;

end;

end;

procedure TMainForm.BitBtn2Click(Sender: TObject);

var

T: TRegistry;

begin

T:=TRegistry.Create;

T.RootKey:=HKEY_LOCAL_MACHINE;

T.OpenKey('\Software\Laynik Group\[LG] Hazard Encrypter 2000',True);

Open.InitialDir:=T.ReadString('Lastpath');

if Open.Execute then

begin

files.Items.AddStrings(Open.files);

validatefiles;

T.WriteString('Lastpath',ExtractFileDir(Open.Files.Strings[Open.Files.Count-1]));

end;

T.Free;

end;

procedure TMainForm.BitBtn3Click(Sender: TObject);

begin

if (files.Items.Count=0) or (files.ItemIndex=-1) then exit;

files.Items.Delete(files.ItemIndex);

end;

procedure TMainForm.BitBtn6Click(Sender: TObject);

begin

files.clear;

end;

end.

unit CodingUnit;

interface

uses Classes,SysUtils,Dialogs,CodingTools,K1,K2,K3,GOST;

Const

PIECE_LENGTH = $FFFF;

// Direction constants

diForward = 1;

diBackward = 0;

// ERROR VALUES

CL_ERROR_EMPTYLINE = -1;

CL_ERROR_NOFILENAME = -2;

function Coding_Kir(Buf: Pointer; Size: LongInt; Param: TCodingParameters): Integer;

function DeCoding_Kir(Buf: Pointer; Size: LongInt; Param: TCodingParameters): Integer;

function DoCoding(S: String): integer;

function DoDecoding(S: String): integer;

function MethodIndex(const S: String):integer;

function MethodByChar(const C: Char):integer;

const

QolMethods = 4;

Methods:array[1..QolMethods] of TCodingFunction =

((MethodName:'ГОСТ 28147-89 (ПЗ)';MethodKey:'G';MethodProc:Coding_GOST;MethodDecProc:Coding_GOST;

KeyMinLength:32;KeyMaxLength:32;KeyMinMessage:'Ключ должен быть длиной 32 символa';KeyMaxMessage:'Ключ должен быть длиной 32 символa';

MethodDescription:'Кодирование по ГОСТ 28147-89 (простая замена)'),

(MethodName:'ГОСТ 28147-89 (Г)';MethodKey:'G';MethodProc:Coding_GOST;MethodDecProc:Coding_GOST;

KeyMinLength:32;KeyMaxLength:32;KeyMinMessage:'Ключ должен быть длиной 32 символa';KeyMaxMessage:'Ключ должен быть длиной 32 символa';

MethodDescription:'Кодирование по ГОСТ 28147-89 (гаммирование)'),

(MethodName:'К1';MethodKey:'K';MethodProc:Coding_K1;MethodDecProc:DeCoding_K1;

KeyMinLength:8;KeyMaxLength:8;KeyMinMessage:'Ключ должен быть длиной 8 символов';KeyMaxMessage:'Ключ должен быть длиной 8 символов';

MethodDescription:'Сумма по модулю два'),

(MethodName:'К2';MethodKey:'L';MethodProc:Coding_K2;MethodDecProc:DeCoding_K2;

KeyMinLength:3;KeyMaxLength:8;KeyMinMessage:'Минимальная длина ключа - 3 символа';KeyMaxMessage:'Ключ должен быть длиной менее 9 символов';

MethodDescription:'Циклический сдвиг'));

UsedMethods:array[1..QolMethods] of TCodingParameters =

((Key:'';WayCount:1;Direction:1),

(Key:'';WayCount:1;Direction:1),

(Key:'';WayCount:1;Direction:1),

(Key:'';WayCount:1;Direction:1));

Used: array[1..QolMethods] of boolean = (false,

false,

false,

false);

implementation

uses TestUnit, ProgressUnit;

function MethodIndex(const S: String):integer;

var

i: integer;

begin

Result:=0;

for i:=1 to QolMethods do

begin

if CompareStr(S,Methods[i].MethodName)=0 then

Result:=i;

end;

end;

function MethodByChar(const C: Char):integer;

var

i: integer;

begin

Result:=0;

for i:=1 to QolMethods do

begin

if C=Methods[i].MethodKey then

Result:=i;

end;

end;

function GenerateFileName(s:string):string;

begin

Result:=concat(s,'.crf');

end;

function GenerateDecFileName(s:string):string;

begin

If Pos('.CRF',UpperCase(s))<>0 then delete(s,Pos('.CRF',uppercase(s)),4);

s:=concat(s,'.dec');

Result:=s;

end;

function DoCoding(S: String): integer;

var

j,i,ks,ls,size,res,fs,pr: integer;

f,outp: file;

buf: pointer;

S1: String;

begin

result:=0;

GetMem(buf,$10000);

fillchar(buf^,$10000,0);

if buf=nil then begin

ShowMessage('Не хватает памяти под буфер');

Result:=1;

exit;

end;

AssignFile(f,s);

s1:=GenerateFileName(s);

AssignFile(outp,s1);

{$I-}

Reset(f,1);

fs:=filesize(f);

Rewrite(outp,1);

{$I+}

if IOResult=0 then

begin

ProgressForm.UpdateProgress(s1,0,'Кодирование ');

size:=$10000;

while size=$10000 do

begin

BlockRead(f,buf^,$10000,size);

for i:=1 to QolMethods do

begin

ks:=0;

if (size mod 8)<>0 then

begin

ls:=(8*((size div 8)+1));

ks:=ls-size;

for j:=size to ls-1 do PCHAR(buf)[j]:=#0;

end else ls:=size;

if Used[i] then Methods[i].MethodProc(buf,ls,UsedMethods[i]);

if fs<>0 then pr:=round(filepos(f)*100 / fs) else pr:=round((100*i) / qolmethods);

ProgressForm.UpdateProgress(s1,pr,'Кодирование ');

end;

BlockWrite(outp,buf^,ls,res);

end;

if ks<>0 then blockwrite(outp,ks,1);

end

else ShowMessage('Ошибка обращения к '+S);

CloseFile(f);

CloseFile(outp);

FreeMem(buf,$10000);

ProgressForm.EndProcess;

end;

function DoDecoding(S: String): integer;

var

ks,pr,i,size,res,fs: integer;

f,outp: file;

buf: pointer;

s1: string;

begin

result:=0;

GetMem(buf,$10000);

fillchar(buf^,$10000,0);

if buf=nil then begin

ShowMessage('Не хватает памяти под буфер');

Result:=1;

exit;

end;

AssignFile(f,s);

s1:=GenerateDecFileName(s);

AssignFile(outp,s1);

{$I-}

Reset(f,1);

fs:=filesize(f);

Rewrite(outp,1);

{$I+}

if IOResult=0 then

begin

ProgressForm.UpdateProgress(s1,0,'Декодирование ');

size:=$10000;

while size=$10000 do

begin

BlockRead(f,buf^,$10000,size);

for i:=QolMethods downto 1 do

begin

if Used[i] then Methods[i].MethodDecProc(buf,size,UsedMethods[i]);

if fs<>0 then pr:=round(filepos(f)*100 / fs) else pr:=round((100*i) / qolmethods);

ProgressForm.UpdateProgress(s1,pr,'Декодирование ');

if (size mod 8)<>0 then

begin

ks:=byte(PCHAR(Buf)[size-1])+1;

end else ks:=0;

end;

BlockWrite(outp,buf^,size,res);

end;

Seek(outp,filepos(outp)-ks);

Truncate(outp);

end

else ShowMessage('Ошибка обращения к '+S);

CloseFile(f);

CloseFile(outp);

FreeMem(buf,$10000);

ProgressForm.EndProcess;

end;

function Coding_Kir;

begin

Result:=0;

end;

function DeCoding_Kir;

begin

Result:=0;

end;

end.

unit GOST;

interface

uses

SysUtils,

CodingTools;

function coding_GOST(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

function coding_GOSTSE(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

implementation

var

Key: array [0..7] of LongWord;

const

ExchTable: array [0..7,0..15] of byte =

((2,5,3,7,12,1,15,14,9,4,6,8,10,0,11,13),

(8,3,1,9,10,15,2,14,13,5,11,7,0,12,4,3),

(15,1,14,2,13,3,12,4,11,5,10,0,6,9,7,8),

(1,3,5,7,9,2,4,6,8,10,11,13,15,12,14,0),

(1,4,7,10,13,2,5,8,11,0,14,3,6,9,12,15),

(1,5,9,13,2,6,10,0,14,3,7,11,15,4,8,12),

(1,6,11,2,7,12,0,3,8,13,4,9,14,5,10,15),

(1,7,0,13,2,8,14,3,9,15,4,10,5,11,6,12));

C1 = $1010101;

C2 = $1010104;

procedure BaseStep(var N:word64; X: longword);

var

i:integer;

s:word64;

begin

s.v32[0]:=(N.v32[0] + X) mod $100000000;

for i:=0 to 3 do

begin

//Замена по таблице младшие или старшие 4 бита

s.v8[i]:=(ExchTable[i*2,(s.v8[i] and $0F)]) or (ExchTable[i*2+1,((s.v8[i] shr 4) and $0F)] shl 4);

end;

asm

push ecx

mov cl,11

rol DWORD[s.v32[0]],cl

pop ecx

end;

s.v32[0]:=s.v32[0] xor N.v32[1];

N.v32[1]:=N.v32[0];

N.v32[0]:=s.v32[0];

end;

procedure SEcoding64bits(var N:word64);

var

k,j: integer;

s:LongWord;

begin

for k:=1 to 3 do

for j:=0 to 7 do BaseStep(N,Key[j]);

for j:=7 downto 0 do BaseStep(N,Key[j]);

s:=N.v32[0];

N.v32[0]:=N.v32[1];

N.v32[1]:=s;

end;

procedure SEdecoding64bits(var N:word64);

var

k,j: integer;

s:LongWord;

begin

for j:=0 to 7 do BaseStep(N,Key[j]);

for k:=1 to 3 do

for j:=7 downto 0 do BaseStep(N,Key[j]);

s:=N.v32[0];

N.v32[0]:=N.v32[1];

N.v32[1]:=s;

end;

procedure GOST_G_coding(var T: pointer; S:word64; Size:word);

var

i:integer;

begin

SEcoding64bits(S);

for i:=1 to (Size div 8) do

begin

S.v32[0]:=(S.v32[0]+C1) mod $100000000;

S.v32[1]:=((S.v32[1]+C2-1) mod ($ffffffff)) +1;

word64(Pointer(LongWord(T)+LongWord((i-1)*8))^).v32[0]:=

word64(Pointer(LongWord(T)+LongWord((i-1)*8))^).v32[0] xor S.v32[0];

word64(Pointer(LongWord(T)+LongWord((i-1)*8))^).v32[1]:=

word64(Pointer(LongWord(T)+LongWord((i-1)*8))^).v32[1] xor S.v32[1];

end;

end;

function coding_GOST(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

var

i: integer;

s: word64;

begin

s.v32[0]:=0; s.v32[1]:=0;

for i:=0 to 7 do

begin

Key[i]:=(BYTE(Param.Key[i*4+3]) shr 24) or (BYTE(Param.Key[i*4+2]) shr 16) or

(BYTE(Param.Key[i*4+1]) shr 8) or (BYTE(Param.Key[i*4]));

s.v32[i mod 2]:=s.v32[i mod 2]+Key[i];

end;

GOST_G_coding(Buf,s,Size);

end;

function coding_GOSTSE(Buf: Pointer; Size: LongWord; Param: TCodingParameters):Integer;

var

i: integer;

begin

for i:=0 to 7 do

begin

Key[i]:=(BYTE(Param.Key[i*4+3]) shr 24) or (BYTE(Param.Key[i*4+2]) shr 16) or

(BYTE(Param.Key[i*4+1]) shr 8) or (BYTE(Param.Key[i*4]));

end;

for i:=1 to (Size div 8) do

begin

SEcoding64bits(word64(Pointer(LongWord(Buf)+LongWord((i-1)*8))^));

end;

end;

var

i: integer;

begin

for i:=0 to 7 do Key[i]:=0;

end.

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5140
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее